太菜了,写了一上午。遇到了无数的问题,好在没有放弃,一一解决了。
首先是xpath解析出现问题,在原网站上用xpath工具可以顺利地解析出a标签里面的链接,但在pycharm上获取的是空列表。于是乎将原网页代码爬取下来,观察了要获取内容所对应的标签,发现标签与原网页是一样的,但是标签的class不同,于是将xpath解析里面的class属性改掉,最终获取到了目标链接。
然后是乱码问题,由于个人疏忽,没有对for循环内部的响应数据进行手动设定编码格式。找了很多资料,没有找到解答,最后才发现这个简单问题。
总的来说,xpath解析数据难度不大,难的是做项目的时候,并不是单一的知识点,而是众多知识点混杂在一起,我们要在学习中进行有意识地积累,这样可以尽可能避免一些简单问题,也方便自己进行排错。
# 开发时间:2020/12/27 23:03
# 开发工具:PyCharm
# 开发者:Friday
#网址: https://sc.chinaz.com/jianli/free.html
import requests
from lxml import etree
import os
if __name__ == "__main__":
#获取网页源码到本地
original_url = 'https://sc.chinaz.com/jianli/free.html'
response = requests.get(url=original_url)
response.encoding = "utf-8"
page_text = response.text
headers = {
'Referer': 'http://pic.netbian.com/4kmeinv/index_2.html',
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
# url = 'https://sc.chinaz.com/tag_jianli/free.html'
# response = requests.get(url = url,headers = headers).text
# print(response)
# print(page_text)
tree = etree.HTML(page_text)
url_list = tree.xpath('//div[@class="box col3 ws_block"]/a/@href')
if not os.path.exists('./jianlimoban'):
os.mkdir('./jianlimoban')
for url in url_list:
url = 'http:' + url + '#down'
response = requests.get(url=url,headers=headers)
response.encoding = "utf-8"
response = response.text
tree = etree.HTML(response)
#获取最终下载地址
add = tree.xpath('//ul[@class="clearfix"]/li[8]/a/@href')[0]
#获取文件名
name = tree.xpath('//div[@class="ppt_tit clearfix"]/h1/text()')[0]+ '.rar'
print(name)
wenjian = requests.get(url=add,headers=headers).content
file_path = './jianlimoban/' + name
with open(file_path,'wb') as fp:
fp.write(wenjian)
print("over!")
结果图