携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情
使用实例一:获取需要的文字
1、导入需要使用的模块
import urllib.request
from lxml import etree
2、发送请求访问网站,得到服务器响应的页面源码
# 请求地址
url = 'https://baidu.com'
# 用户代理
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/10'
}
# 定制请求头
request = urllib.request.Request(url=url,headers=headers)
# 发送请求访问服务器,返回响应对象
response = urllib.request.urlopen(request)
# 解码响应对象,得到页面源码
content = response.read().decode('utf-8')
3、解析服务器响应的文件并返回解析对象
# 解析服务器响应的文件
parse_html = etree.HTML(content)
4、调用xpath路径,提取数据,xpath的返回数据是列表类型
可以用xpath插件来动态的获取xpath路径:(可以将鼠标悬停在需要提取的文本数据上,然后按 shift 键就xpath插件的右边就会自动出现定位该文本的Xpath 表达式,然后再根据需求对表达式修改。)
待提取数据的xpath路径:
list = parse_html.xpath('//input[@id="su"]/@value')
最后总体代码实现:
import urllib.request
from lxml import etree
# 请求地址
url = 'https://baidu.com'
# 用户代理
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/10'
}
# 定制请求头
request = urllib.request.Request(url=url,headers=headers)
# 发送请求访问服务器,返回响应对象
response = urllib.request.urlopen(request)
# 解码响应对象,得到页面源码
content = response.read().decode('utf-8')
# 解析服务器响应的文件
parse_html = etree.HTML(content)
# 编写xpath路径,获取想要的数据,xpath的返回值是列表类型
list = parse_html.xpath('//input[@id="su"]/@value')
# 获得列表的第一个数据
list1 = parse_html.xpath('//input[@id="su"]/@value')[0]
print(list)
print(list1)
执行结果:
['百度一下']
百度一下
使用实例二:从网站上提取图片
先发送请求访问网站,得到网站响应文件,然后解析网站响应文件,从网站响应文件中使用xpath表达式定位到需要的图片地址,然后用 urllib.request.urlretrieve()方法得到图片。
代码实例:
import urllib.request
from lxml import etree
# 定制请求对象
def creat_request(page):
if(page == 1):
url = 'https://sc.chinaz.com/tupian/fengjingtupian.html'
else:
url = 'https://sc.chinaz.com/tupian/fengjingtupian_'+str(page)+'.html'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/10'
}
request = urllib.request.Request(url=url,headers=headers)
return request
# 发送请求,获得返回内容
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
# 下载图片
def down_image(content):
# 解析服务器响应的文件
parse_html = etree.HTML(content)
# 图片地址
src_list = parse_html.xpath('//div[@id="container"]//a/img/@src')
# 图片名
name_list = parse_html.xpath('//div[@id="container"]//a/img/@alt')
for i in range(len(name_list)):
name = name_list[i]
src = src_list[i]
url = 'https:'+src
# 下载图片到文件夹,路径为当前项目下的fengjingimage文件夹
urllib.request.urlretrieve(url=url, filename='./fengjingimage/'+name+'.jpg')
if __name__ == '__main__':
start_page = int(input("请输入起始页:"))
end_page = int(input("请输入结束页:"))
for page in range(start_page,end_page+1):
request = creat_request(page)
content = get_content(request)
down_image(content)
执行结果:
请输入起始页:1
请输入结束页:2
Process finished with exit code 0
图片提取成功: