首页 > 编程语言 >手把手教你使用Python网络爬虫获取菜谱信息

手把手教你使用Python网络爬虫获取菜谱信息

时间:2023-04-23 11:36:06浏览次数:45  
标签:html1 Python 手把手 self 爬虫 parse url html page


一腔热血勤珍重,洒去犹能化碧涛。

/1 前言/

    在放假时 ,经常想尝试一下自己做饭,下厨房这个网址是个不错的选择。

    下厨房是必选的网址之一,主要提供各种美食做法以及烹饪技巧。包含种类很多。

    今天教大家去爬取下厨房的菜谱 ,保存在world文档,方便日后制作自己的小菜谱。

手把手教你使用Python网络爬虫获取菜谱信息_html

/2 项目目标/

    获取菜谱,并批量把菜 名、 原 料 、下 载 链 接 、下载保存在world文档。

/3 项目准备/

软件:PyCharm

需要的库:requestslxmlfake_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。导入需要的库和网址,代码如下所示。

import requests
from lxml import etree
from fake_useragent import UserAgent
import time


class  kitchen(object):
    def __init__(self):
      self.url = "https://www.xiachufang.com/explore/?page={}"


    def main(self):
        pass


if __name__ == '__main__':
    imageSpider =  kitchen()
    imageSpider.main()

2、随机产生UserAgent。

for i in range(1, 50):
            self.headers = {
                'User-Agent': ua.random,
            }

3、发送请求  获取响应, 页面回调,方便下次请求。

def get_page(self, url):
    res = requests.get(url=url, headers=self.headers)
    html = res.content.decode("utf-8")
    return html

4、xpath解析一级页面数据,获取二级页面网址。

def parse_page(self, html):
    parse_html = etree.HTML(html)
    image_src_list = parse_html.xpath('//li/div/a/@href')

5、for遍历,定义一个变量food_info保存,获取到二级页面对应的菜 名、 原 料 、下 载 链 接。

for i in image_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 = 0
self.u += 1;

/6 效果展示/

1、点击绿色小三角运行输入起始页,终止页。

手把手教你使用Python网络爬虫获取菜谱信息_xml_02

2、运行程序后,结果显示在控制台,如下图所示。

手把手教你使用Python网络爬虫获取菜谱信息_xml_03

3、将运行结果保存在world文档中,如下图所示。

手把手教你使用Python网络爬虫获取菜谱信息_xml_04

4、双击文件,内容如下图所示。

手把手教你使用Python网络爬虫获取菜谱信息_html_05

/7 小结/

1、本文章基于Python网络爬虫,获取下厨房网站菜谱信息,在应用中出现的难点和重点,以及如何防止反爬,做出了相对于的解决方案。

2、介绍了如何去拼接字符串,以及列表如何进行类型的转换。

3、代码很简单,希望能够帮到你。

4、欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、可以选择自己喜欢的分类,获取自己喜欢的菜谱,每个人都是厨师。


标签:html1,Python,手把手,self,爬虫,parse,url,html,page
From: https://blog.51cto.com/u_13389043/6216912

相关文章

  • 手把手教你用Python打造一款批量下载视频并能可视化显示下载进度的下载器
    今日鸡汤桃之夭夭,灼灼其华。/1前言/    平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上。这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。/2项目目标/    通过Python程序对所感兴趣的视频进行批量......
  • 手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
    /1前言/在家闲着,做个小项目,基于Python,实现一个语聊小机器人,分享给大家。项目整体比较简单,官方文档介绍的非常详细,可快速上手。/2 目标/将图灵机器人放到桌面,实现工作助手/陪聊功能。/3 涉及的库/V1.0版本:requests、jsonV2.0版本:requests、json、selenium(实现功能:如图灵返回结果......
  • 手把手教你使用Flask搭建ES搜索引擎(预备篇)
    今日鸡汤我死国生,我死犹荣,身虽死精神长生,成功成仁,实现大同。--赵博生/1前言/    Elasticsearch是一个开源的搜索引擎,建立在一个全文搜索引擎库ApacheLucene™基础之上。    那么如何实现 Elasticsearch和Python 的对接成为我们所关心的问题了(怎么什么都要和Pyt......
  • 一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取
    前几天小编给大家分享了数据可视化分析,在文尾提及了网易云音乐歌词爬取,今天小编给大家分享网易云音乐歌词爬取方法。本文的总体思路如下:找到正确的URL,获取源码;利用bs4解析源码,获取歌曲名和歌曲ID;调用网易云歌曲API,获取歌词;将歌词写入文件,并存入本地。本文的目的是获取网易云......
  • 关于python爬虫解析的问题
    在进行Python爬虫解析时,需要注意以下事项:1、良好的网站使用协议:需要遵守网站的robots.txt文件,以确保你的爬虫程序不会将网站拦截下来。2、编码问题:需要正确设置HTTP头和解析器的编码,以确保爬虫程序能够正确地解析网站的信息。3、数据解析:需要适当地处理HTML文档中的标签,以便从......
  • python变量名规则&大小写敏感
    1.变量名由英文字母、下划线_或数字组成(不能包含空格、%、-、*、/、&、^等),并且第一个字符必须是英文字母或下划线。 2.变量名不能是Python关键字。(关键字指的是Python本身“已经在使用”的名字,Python已经占用了这些名字,所以我们不能用)常见的关键字:True False None(注意......
  • 反爬虫的所有套路和策略
    反爬虫是一种防止网络爬虫抓取网站内容的技术。为了保护网站的数据安全,网站管理员采用了各种策略来阻止或限制爬虫的访问。以下是一些常见的反爬虫策略和相应的例子:User-Agent检查:检查请求头的User-Agent字段来识别爬虫。例如,如果User-Agent是一个非常规浏览器的标识符,网......
  • Python time 库常用函数
    time模块中时间表现的格式主要有三种:timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量struct_time时间元组,共有九个元素组。formattime格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。使用time库前先用import导......
  • python3-hex
    hex函数,参数可以是一个int整数或一个bytes类型元素,转为0x的十六进制字符串形式withopen(file='J:/新建文本文档.txt',mode='rb')asf:s=f.read()print(type(s),s)result=''foriins:result+=hex(i)print(result)<class'......
  • 基于 Python 开发的外星人入侵小游戏
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]玩家通过鼠标控制飞船行动和射击,若能在敌人到达游戏界面底端之前消灭所有敌人,则游戏胜利,否则游戏失败。导语写了个低配版的外星人入侵小游戏来作为19年的第一更吧~让我们愉快地开始吧~开发工具**Python版本:**3.6.4相关模块:pygame......