在爬取网页数据时,经常会遇到直接对网页地址发送请求,可返回的HTML代码中并没有所需要的数据,遇到这样的情况,多数都是因为网页数据使用了动态加载的技术。例如爬取(https://www.taobao.com/ 某宝首页,猜你喜欢的宝贝数据时,就会遇到动态加载数据的情况,数据如图1所示。
图1 宝贝数据
Requests-HTML模块提供了render()方法,第一次调用该方法将会自动下载Chromium浏览器,然后通过该浏览器直接加载JavaScript渲染后的信息,使用render()方法爬取宝贝数据的具体步骤如下
(1 创建HTML会话与随机请求头对象,然后发送网络请求,在请求成功的情况下调用render()方法获取网页中JavaScript渲染后的信息。代码如下
01 from requests_html import HTMLSession,UserAgent # 导入HTMLSession类 02 03 session = HTMLSession() # 创建HTML会话对象 04 ua = UserAgent().random # 创建随机请求头 05 # 发送网路请求 06 r = session.get('https://www.taobao.com/',headers = {'user-agent': ua}) 07 r.encoding='gb2312' # 编码 08 if r.status_code == 200: # 判断请求是否成功 09 r.html.render() # 调用render()方法,没有Chromium浏览器就自动下载 |
(2 运行步骤2中代码,由于第一次调用render()方法,所以会自动下载Chromium浏览器,下载完成后控制台将显示如图2所示的提示信息。
图2 Chromium浏览器下载完成后的提示信息
注意 在第一次调用render()方法时,可能会出现如图3所示的错误信息。此时在命令提示符窗口中执行pip install -U "urllib3<1.25"命令,降低Anaconda中urllib3模块的版本即可解决。
图3 错误提示信息
(3 打开浏览器开发者工具,在“Elements”的功能选项中确认宝贝信息所在HTML标签的位置,如图4所示。
图4 获取宝贝信息的标签位置
(4 编写获取宝贝信息的代码,首先获取所有宝贝对应的a标签,然后在a标签中获取详情页地址,接着在a标签中获取宝贝的标题与价格。代码如下
10 a_href_all = r.html.xpath('//a[@class="item-link"]') # 获取所有宝贝对应的标签 11 for a in a_href_all: 12 href=a.attrs.get('href') # 获取详情页地址 13 if 'http'not in href: # 检测地址中是否含有 14 href='http:'+href # 地址中没有http的添加 15 title = a.find('div.title',first=True) # 获取宝贝的标题 16 price = a.find('span.price-value',first=True) # 获取宝贝的价格 17 print('宝贝标题名称 ',title.text) # 打印宝贝名称 18 print('宝贝价格 ',price.text) # 打印宝贝价格 19 print('宝贝详情页地址 ',href) # 打印宝贝详情地址 |
程序运行的部分结果如下
宝贝标题名称 恐龙公仔毛绒玩具玩偶床上睡觉长条夹腿抱枕布娃娃送女生生日礼物
宝贝价格 ¥12.9
宝贝详情页地址 http://item.taobao.com/item.htm?id=670653734656&scm=1007.40986.275655.0&
pvid=f4d130aa-ccb1-4bfd-873e-0371366df6b9
宝贝标题名称 多层塑料抽屉式收纳柜宝宝衣柜家用婴儿玩具盒整理箱儿童储物柜子
宝贝价格 ¥108
宝贝详情页地址 http://item.taobao.com/item.htm?id=638337392473&scm=1007.40986.275655.0&
pvid=f4d130aa-ccb1-4bfd-873e-0371366df6b9
上新ins小包包女斜挎包2022新款简约少女百搭小清新单肩尼龙布包
¥9.9
http://item.taobao.com/item.htm?id=669577450930&scm=1007.40986.275655.0&pvid=21e2d603-6b0c-4afe-a5da-f576eccc8f00
啊呜鲨鱼抱枕条条薯条同款毛绒玩具床上陪睡抱枕玩偶公仔生日礼物
¥12.9
http://item.taobao.com/item.htm?id=602339378775&scm=1007.40986.275655.0&pvid=21e2d603-6b0c-4afe-a5da-f576eccc8f00
Powered by 小羊羔外链网 8.3.12
©2015 - 2024 小羊羔外链网
您的IP:182.107.180.175,2024-04-26 21:02:14,Processed in 0.05188 second(s).