抓取网页音频(一下如何用Python来爬取京东商品())
优采云 发布时间: 2022-04-20 14:29抓取网页音频(一下如何用Python来爬取京东商品())
大家好,我在调零~
今天我将介绍如何使用Python爬取京东产品类别。数据包括产品名称、价格、出版商、作者等信息。
本爬虫使用的核心库是Selenium + pyquery。 Selenium用于驱动浏览器模拟访问网页,pyquery用于解析页面信息进行数据提取。我们先来看看最终效果
启动脚本后,Selenium自动打开京东网页,翻转商品页面信息,并控制后台在浏览器翻页时返回提取的数据。
在介绍主程序之前,先介绍一下Selenium包
1、Selenium的安装
Selenium主要用作Web应用程序的测试工具,可以控制浏览器完成一系列步骤,模拟人类操作;查询快递单号没有问题,目前支持Java、Python、C#、Ruby等语言;
在做网页爬取的时候,有些网页的数据是用ajax方式渲染的,比如微博,标题没有下一页入口,通过刷新页面来实现翻页效果;这种网页数据不是直接放在html中,而是通过用户操作触发html中嵌入的js命令,从而调用存储在json文件中的数据,最终渲染出来;
对于这类网页,一般有两种思路采集:
1。使用开发者工具找到存储json数据的隐藏链接,然后使用常规的Request方法提取数据; 2.使用Selenium工具模拟人类操作,实现数据采集;
因此,Selenium工具可以对网页的一些反爬措施实现一些有效的抑制;
Python使用Selenium时,可以使用打包好的Selenium库,可以使用pip命令完成安装
pip install selenium
目前,Selenium 支持的浏览器包括 Chrome 和 Firefox。建议大家选择Chrome,因为网上关于Chrome的文档比较多。
使用前,除了确保安装了Chrome浏览器外,还需要确保chromedriver.exe工具(Selenium的核心是webdriver,chromedriver.exe是Chrome的WebDriver工具)也安装好了。
chromedriver的版本需要和Chrome浏览器的版本对应,本地下载即可
下载地址如下:
2、爬虫逻辑
使用Selenium模拟人工操作抓取京东数据,分为以下几个步骤(这里以Python图书产品抓取为例):
1、驱动浏览器,打开京东网站; 2、找到搜索框,清空并填写关键词 Python book,然后点击旁边的搜索按钮; 3、到产品页面抓取数据,然后驱动Selenium工具完成翻页操作,依次抓取所有数据;
首先需要初始化,创建webdriver Chrome浏览器,数据存储文件(这里我使用txt文件)
def __init__(self,item_name,txt_path):<br /> url = 'https://www.jd.com/' # 登录网址<br /> self.url = url<br /> self.item_name = item_name<br /><br /> self.txt_file = open(txt_path,encoding='utf-8',mode='w+')<br /><br /> options = webdriver.ChromeOptions() # 谷歌选项<br /><br /> # 设置为开发者模式,避免被识别<br /> options.add_experimental_option('excludeSwitches',<br /> ['enable-automation'])<br /> self.browser = webdriver.Chrome(executable_path= "C:/Program Files/Google/Chrome/Application/chromedriver.exe",<br /> options = options)<br /> self.wait = WebDriverWait(self.browser,2)
webdriver.Chrome()方法用于创建驱动浏览器Chrome,将之前下载的chromedriver.exe的文件夹路径赋值给executable_path参数,
浏览器打开网页时,可能是由于网速加载慢的问题,所以这里我们使用WebDriverWait方法来创建一个等待方法,浏览器每次调用之前需要等待2秒进行下一步;
初始化操作后,接下来就是主程序模拟访问、输入、点击等操作;我将所有这些操作封装到一个run()函数中,
def run(self):<br /> """登陆接口"""<br /> self.browser.get(self.url)<br /><br /> input_edit = self.browser.find_element(By.CSS_SELECTOR,'#key')<br /> input_edit.clear()<br /> input_edit.send_keys(self.item_name)<br /><br /><br /> search_button = self.browser.find_element(By.CSS_SELECTOR,'#search > div > div.form > button')<br /> search_button.click()# 点击<br /> time.sleep(2)<br /><br /> html = self.browser.page_source # 获取 html<br /> self.parse_html(html)<br /> current_url = self.browser.current_url # 获取当前页面 url<br /> initial_url = str(current_url).split('&pvid')[0]<br /><br /> for i in range(1,100):<br /> try:<br /> print('正在解析----------------{}图片'.format(str(i)))<br /> next_page_url = initial_url + '&page={}&s={}&click=0'.format(str(i*2+1),str(i*60+1))<br /> print(next_page_url)<br /> self.browser.get(next_page_url)<br /><br /> self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_goodsList > ul > li')))<br /> html = self.browser.page_source<br /> self.parse_html(html)# 对 html 网址进行解析<br /> time.sleep(2) # 设置频率<br /> except Exception as e:<br /> print('Error Next page',e)<br /> self.txt_file.close()# 关闭 txt 文件
首先使用get()方法访问京东主页,然后定位到页面上的搜索栏和搜索按钮标签输入完成,点击操作
关于网页元素的标签定位,如果没有,可以使用浏览器开发者模式,分为以下步骤(这里以CSS_Selector为例):
1、点击开发者模式左上角的Pick Element按钮; 2、用鼠标点击要选择的元素; 3、在HTML源选择区,右键选择Copy4,选择Copy Selector选项; 5、粘贴到板上;
进行翻页操作时,按照京东url的规律构造,
第 5 页
https://search.jd.com/Search?keyword=%E4%BB%A3%E6%A3%AE%E9%93%B5&qrst=1&suggest=7.def.0.base&wq=%E4%BB%A3%E6%A3%AE%E9%93%B5&stock=1&page=9&s=241&click=0
第 6 页
https://search.jd.com/Search?keyword=%E4%BB%A3%E6%A3%AE%E9%93%B5&qrst=1&suggest=7.def.0.base&wq=%E4%BB%A3%E6%A3%AE%E9%93%B5&stock=1&page=11&s=301&click=0
仔细看会发现,这里的第5页和第6页的url唯一的区别就是page和s这两个参数;
页面才
根据这个规则,通过改变page和s参数来构造京东产品前100页的产品信息,完成数据抓取;
关于数据提取部分,我使用parse_html函数来完成
为了提高程序的友好性,我把所有的功能都封装成一个类,用户只需要输入两个参数,一个是需要的产品名称采集,另一个是是存储文件的路径;可以完成数据爬取;
最后将爬取的数据存入txt文件,结果如下
3、总结
虽然selenium可以有效破解网页上的一些反爬机制,但是对于一些网站,比如拉狗网,当你用Selenium驱动浏览器在拉狗的上模拟翻页操作的时候是没用的官网,网站可识别非人为操作,暂时封禁你的IP并进行警告;
关于本文所涉及的完整源码文章,后台回复关键词:京东小商品,即可获取!