1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【Python黑科技】lxml库爬虫实战-爬取句子控的名人名言句子(保姆级图文+实现代码)

【Python黑科技】lxml库爬虫实战-爬取句子控的名人名言句子(保姆级图文+实现代码)

时间:2021-05-04 21:50:33

相关推荐

【Python黑科技】lxml库爬虫实战-爬取句子控的名人名言句子(保姆级图文+实现代码)

目录

实现效果实现思路导入所用的相关库分析并得到爬取关键词的url网址获取一个随机的user_agent(引入随机headers反爬)访问网页并爬取句子-句子的作者-句子的出处,把这三个内容封装进2层的list中把list存入csv文件中,持久化保存实现代码总结

欢迎关注 『Python黑科技』 系列,持续更新中

欢迎关注 『Python黑科技』 系列,持续更新中

实现效果

爬取的内容

得到的csv文件


实现思路

导入所用的相关库分析并得到爬取关键词的url网址获取一个随机的user_agent(headers的使用使得)访问网页并爬取句子-句子的作者-句子的出处,把这三个内容封装进2层的list中把list存入csv文件中,持久化保存

导入所用的相关库

import requestsfrom lxml import etreeimport csvimport random

分析并得到爬取关键词的url网址

我们搜索关键字程序员

得到的url是/s?q=程序员

多尝试几个其他的关键词,得知修改了q=程序员就会搜索其他的关键词,分析之后找到了这个关键词的爬虫key

因为编码的问题,程序员三个字转化为了%E7%A8%8B%E5%BA%8F%E5%91%98

#/s?q=程序员 #因为url编码要转变的原因,你从浏览器复制黏贴下来会自动变成下面的结果-> url = "/s?q=%E7%A8%8B%E5%BA%8F%E5%91%98"

获取一个随机的user_agent(引入随机headers反爬)

具体可以查看另一篇博文:

【常用的user_agent 浏览器头爬虫模拟用户(保姆级图文+实现代码)】

# 得到随机的一个请求头def get_random_user_agent():user_agent = ["Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/0101 Firefox/38.0","Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/0101 Firefox/4.0.1","Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/0101 Firefox/4.0.1","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)","Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5","Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5","Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5","Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10","Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13","Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+","Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0","Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124","Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)","UCWEB7.0.2.37/28/999","NOKIA5700/ UCWEB7.0.2.37/28/999","Openwave/ UCWEB7.0.2.37/28/999","Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",# iPhone 6:"Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",]return random.choice(user_agent)# headers 使用headers = {'User-Agent': get_random_user_agent()}

访问网页并爬取句子-句子的作者-句子的出处,把这三个内容封装进2层的list中

谷歌浏览器下右键检查获取要爬取的内容的xpth

复制完整xpth

整体区域xpth/html/body/div/div/div/div[3]/main/div[2]

#先获取要爬取的名言的整体的每一个个体,然后迭代每个句子的message,author,sourcequeto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')

句子内容xpth/html/body/div[1]/div/div/div[3]/main/div[2]/section[1]/div[2]/a/span[1]/span/span

作者内容xpth/html/body/div[1]/div/div/div[3]/main/div[2]/section[16]/div[2]/div/span/a/span/span

出处内容xpth/html/body/div[1]/div/div/div[3]/main/div[2]/section[16]/div[2]/div/a/span/span

这个时候我们会得到

# 先获取要爬取的名言的整体,然后再获取整体下面的每一条名言的message,author,sourcequeto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')lists = []print("得到的句子内容:")for queto in queto_list:# 名言正文 /section[1]/div[2]/a/span[1]/span/spanmessage = queto.xpath('./div[2]/a/span[1]/span/span/text()')# 作者/section[16]/div[2]/div/span/a/span/span 不一定每个句子都有作者authuor = queto.xpath('./div[2]/div/span/a/span/span/text()')# 出处/section[16] / div[2] / div / a / span / span 不一定每个句子都有出处source = queto.xpath('./div[2] / div / a / span / span/text()')# 将数据统一添加进列表中保存lists.append(message)lists.append(authuor)lists.append(source)

但是你会发现,因为搜索关键字的原因,这个网站把我们程序员的关键词的内容给分割了,所以我们还要把message的list变成字符串,比如说:

['我以后是', '程序员', '的话....']应该被转化为['我以后是程序员的话....']

修改后

# 先获取要爬取的名言的整体,然后再获取整体下面的每一条名言的message,author,sourcequeto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')lists = []print("得到的句子内容:")for queto in queto_list:# 名言正文 /section[1]/div[2]/a/span[1]/span/spanmessage = queto.xpath('./div[2]/a/span[1]/span/span/text()')# 作者/section[16]/div[2]/div/span/a/span/span 不一定每个句子都有作者authuor = queto.xpath('./div[2]/div/span/a/span/span/text()')# 出处/section[16] / div[2] / div / a / span / span 不一定每个句子都有出处source = queto.xpath('./div[2] / div / a / span / span/text()')# 将数据统一添加进列表中保存this_list = []str_message = ''.join(message)this_list.append(str_message)str_authuor = ''.join(authuor)this_list.append(str_authuor)str_source = ''.join(source)this_list.append(str_source)# print(this_list)#打印本句子的所有信息lists.append(this_list)#测试输出保存的数据print(lists)

把list存入csv文件中,持久化保存

with open("./名人名言.csv", 'w', encoding='utf-8', newline='\n') as f:writer = csv.writer(f)for i in lists:writer.writerow(i)


实现代码

完整的实现代码,拿来即用

# @Time : /2/1 17:45# @Author : 南黎# @FileName: Python爬虫爬取句子迷句子.pyimport requestsfrom lxml import etreeimport csvimport random# /s?q=程序员# 因为url编码要转变的原因,你复制下来应该是下面的结果 程序员 三个字转化为了 %E7%A8%8B%E5%BA%8F%E5%91%98url = "/s?q=%E7%A8%8B%E5%BA%8F%E5%91%98"# 得到随机的一个请求头def get_random_user_agent():user_agent = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",]return random.choice(user_agent)# headers 使用headers = {'User-Agent': get_random_user_agent()}print("使用的随机浏览器头:")print(headers)get_request = requests.get(url=url, headers=headers).text# html:爬取得到的网页html内容html = etree.HTML(get_request)# 先获取要爬取的名言的整体,然后再获取整体下面的每一条名言的message,author,sourcequeto_list = html.xpath('/html/body/div/div/div/div[3]/main/div[2]/section')lists = []print("得到的句子内容:")for queto in queto_list:# 名言正文 /section[1]/div[2]/a/span[1]/span/spanmessage = queto.xpath('./div[2]/a/span[1]/span/span/text()')# 作者/section[16]/div[2]/div/span/a/span/span 不一定每个句子都有作者authuor = queto.xpath('./div[2]/div/span/a/span/span/text()')# 出处/section[16] / div[2] / div / a / span / span 不一定每个句子都有出处source = queto.xpath('./div[2] / div / a / span / span/text()')# 将数据统一添加进列表中保存this_list = []str_message = ''.join(message)this_list.append(str_message)str_authuor = ''.join(authuor)this_list.append(str_authuor)str_source = ''.join(source)this_list.append(str_source)# print(this_list)#打印本句子的所有信息lists.append(this_list)# 测试输出保存的数据print(lists)with open("./名人名言.csv", 'w', encoding='utf-8', newline='\n') as f:writer = csv.writer(f)for i in lists:writer.writerow(i)


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python黑科技!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright mzh

Crated:-2-1

欢迎关注 『Python黑科技』 系列,持续更新中

欢迎关注 『Python黑科技』 系列,持续更新中

【Python安装第三方库一行命令永久提高速度】

【使用PyInstaller打包exe】

【免登陆爬虫一键下载知乎文章图片(保姆级图文+实现代码)】

【孤独的程序员和AI机器人朋友聊天解闷(免费接口+保姆级图文+实现代码注释)】

【几行代码绘制gif动图(保姆级图文+实现代码)】

【几行代码实现网课定时循环截屏,保存重要知识点(保姆级图文+实现代码)】

【常用的user_agent 浏览器头爬虫模拟用户(保姆级图文+实现代码)】

【更多内容敬请期待】


本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。