爬前须知
xpath解析原理:
1.实例化一个etree对象,且仅需要将被解析的页面源码加载到该对象中
2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
- 环境安装:
pip install lxml
-分析步骤:
1.把第一个网页的所有简历的新页面url获取到
2.到详情页,获取下载地址,对下载地址发起请求
3.完成之后,再考虑进行分页操作
#常规步骤:’’‘举例
0.创建文件夹用来存放爬取到的数据
{
if not os.path.exists(’./moban’):
os.mkdir(’./moban’)
}
1.获取url响应数据 page_text
2.实例化一个对象 tree,通过 etree.HTML(page_text)
3.利用xpath工具定位到想要获取的内容 tree.xpath(’/div[@class=‘ss’]/ul/li/a’)
4.for循环遍历获得多个属性,并进行提取alt = li.xpath(’./a/img/@alt’)[0]
5.进行持久化存储
{
1.获得新的url对应图片的响应数据 data = requests.get().content
2.img_path = ‘moban/’+img_name
}
‘’’
注意:
1.通过观察第一页的url :http://sc.chinaz.com/jianli/free.html
与后面页面的规律不同,需要额外爬取。即爬取第一页,和第二页到第N页的模板。
2…rar文件可以二进制文件形式写入
3.获取新的url之后,需要对新的url进行实例化,这一步很容易遗漏
代码
import requests
import os
from lxml import etree
if not os.path.exists('./moban'):
os.mkdir('./moban')
#requests
url = 'http://sc.chinaz.com/jianli/free.html'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'
}
response = requests.get(url=url,headers=headers)
#设定编码格式为中文
response.encoding = 'utf-8'
page_text = response.text
#xpath
tree = etree.HTML(page_text)
#获取所有的a标签
a_list = tree.xpath('//*[@id="container"]/div/a')
for li in a_list:
new_url= li.xpath('./@href')[0]
#print(new_url) #打印出获取的html
mb_name = li.xpath('./img/@alt')[0]
#print(mb_name) #打印出模板的名字
mb_name= mb_name+'.rar'
down_data = requests.get(url=new_url,headers=headers).text
#再次实例化一个xpth对象
xiazai = etree.HTML(down_data)
down_list = xiazai.xpath('//*[@id="down"]/div[2]/ul/li[3]/a')
for li in down_list:
down = li.xpath('./@href')[0]
#print(down)
last_data = requests.get(url=down,headers=headers)
last_data.encoding = 'utf-8'
last_data= last_data.content
#已经获取到了下载链接down,下面进行持久化存储即可
path='./moban/'+mb_name
with open(path,'wb') as fp:
fp.write(last_data)
print(mb_name,'下载成功')
爬取效果
因为有几百页,此处就下载了一页