王优秀 手把手教你使用Python网络爬虫获取菜谱信息
在放假时 , 经常想尝试一下自己做饭 , 下厨房这个网址是个不错的选择 。
【王优秀 手把手教你使用Python网络爬虫获取菜谱信息】下厨房是必选的网址之一 , 主要提供各种美食做法以及烹饪技巧 。 包含种类很多 。
今天教大家去爬取下厨房的菜谱 , 保存在world文档 , 方便日后制作自己的小菜谱 。
文章图片
/2项目目标/
获取菜谱 , 并批量把菜名、原料、下载链接、下载保存在world文档 。
/3项目准备/
软件:PyCharm
需要的库:requests、lxml、fake_useragent、time
网站如下:
https://www.xiachufang.com/explore/?page={}
点击下一页时 , 每增加一页page自增加1 , 用{}代替变换的变量 , 再用for循环遍历这网址 , 实现多个网址请求 。
/4反爬措施的处理/
主要有两个点需要注意:
1、直接使用requests库 , 在不设置任何header的情况下 , 网站直接不返回数据
2、同一个ip连续访问多次 , 直接封掉ip , 起初我的ip就是这样被封掉的 。
为了解决这两个问题 , 最后经过研究 , 使用以下方法 , 可以有效解决 。
1)获取正常的http请求头 , 并在requests请求时设置这些常规的http请求头 。
2)使用fake_useragent , 产生随机的UserAgent进行访问 。
/5项目实现/
1、定义一个class类继承object , 定义init方法继承self , 主函数main继承self 。 导入需要的库和网址 , 代码如下所示 。
importrequestsfromlxmlimportetreefromfake_useragentimportUserAgentimporttimeclasskitchen(object):def__init__(self):self.url=''https://www.xiachufang.com/explore/?page={}''defmain(self):passif__name__=='__main__':imageSpider=kitchen()imageSpider.main()
2、随机产生UserAgent 。
foriinrange(1,50):self.headers={'User-Agent':ua.random,}
3、发送请求获取响应,页面回调 , 方便下次请求 。
defget_page(self,url):res=requests.get(url=url,headers=self.headers)html=res.content.decode(''utf-8'')returnhtml
4、xpath解析一级页面数据,获取二级页面网址 。
defparse_page(self,html):parse_html=etree.HTML(html)image_ src_list=parse_html.xpath('//li/div/a/@href')
5、for遍历 , 定义一个变量food_info保存 , 获取到二级页面对应的菜名、原料、下载链接 。
foriinimage_ src_list:url=''https://www.xiachufang.com/''+i#print(url)html1=self.get_page(url)#第二个发生请求parse_html1=etree.HTML(html1)#print(parse_html1)num=parse_html1.xpath('.//h2[@id=''steps'']/text()')[0].strip()name=parse_html1.xpath('.//li[@class=''container'']/p/text()')ingredients=parse_html1.xpath('.//td//a/text()')food_info='''第%s种菜名:%s原料:%s下载链接:%s,================================================================='''%(str(self.u),num,ingredients,url)
6、保存在world文档 。
f=open('下厨房/菜谱.doc','a',encoding='utf-8')#以'w'方式打开文件f.write(str(food_info))f.close()
7、调用方法 , 实现功能 。
html=self.get_page(url)self.parse_page(html)
8、项目优化
1)方法一:设置时间延时 。
time.sleep(1.4)
2)方法二:定义一个变量u,for遍历 , 表示爬取的是第几种食物 。 (更清晰可观) 。
u=0self.u+=1;
/6效果展示/
1、点击绿色小三角运行输入起始页 , 终止页 。
文章图片
2、运行程序后 , 结果显示在控制台 , 如下图所示 。
推荐阅读
- 兵团日报|琅琅书声,他再也听不到——追忆兵团优秀共产党员丁憬
- 让“日常行为”成为后浪们的“创意主张”-东华大学服装与艺术设计学院优秀毕业作品云发布
- 酸甜透明夹心|不运动不节食光吃西柚就能瘦?陈乔恩自爆减肥法,网友直呼优秀!
- 王优秀|欧拉白猫终于公布命名了,大狗以后长城汽车又一新力作
- 趣头条|拉的走是生活,用实力证明自己,长城炮真的很优秀,装的下是梦想
- 深剖娱乐圈|baby自曝体重不足90斤,骨量优秀,身体年龄只有26岁
- 『曹操』一个父亲的悲歌——曹操膝下五个既短命又优秀的儿子
- 扶鳐直上九重霄|荒野乱斗:良心总结打法心得,手把手教你轻松通关怪兽大暴走模式
- 王优秀|泪目!他用生命诠释对足球的热爱
- 贵阳看点|“上云用云”优秀案例名单公布,贵阳三案例入围!贵州省工业企业