python网页数据抓取(Python精品电子书籍与50G+优质视频学习资料~)

优采云 发布时间: 2021-09-15 19:04

  python网页数据抓取(Python精品电子书籍与50G+优质视频学习资料~)

  关注官方账号:小张Python,为您准备了50+Python高质量电子书和50G+高质量视频学习资料。后台回复关键词:可获取1024个;如果您对博客内容有任何疑问,请在后台添加作者【个人微信】,您可以直接与作者沟通

  你好,我在调零~

  今天,我们来谈谈如何使用Python抓取京东产品。数据包括产品名称、价格和其他信息

  

  此爬虫程序使用的核心库是selenium+pyquery。Selenium用于驱动浏览器模拟网页访问,pyquery用于解析网页信息以进行数据提取。让我们先看看最后的效果

  

  脚本启动后,selenium将自动打开JD网页,翻页产品页面信息,并在浏览器翻页时控制后台返回提取的数据

  在介绍主程序之前,这里是selenium包

  硒装置

  Selenium主要用作web应用程序的测试工具。它可以操纵浏览器完成一系列步骤,模拟人工操作;例如,在web上自动填写文本和查询快递订单号没有问题。目前,它支持Java、python、c#、ruby等语言

  

  在进行网页爬网时,某些网页的数据是用Ajax呈现的,例如微博。标题没有进入下一页,通过刷新页面实现翻页效果;这种网页数据不是直接放在HTML中,而是由用户操作触发,触发嵌入HTML中的JS命令,从而调用存储在JSON文件中的数据并最终呈现

  对于此类网页采集,有两个基本思路:

  因此,selenium工具可以有效地抑制网页上的一些反爬行措施

  当Python使用selenium时,它可以使用封装的selenium库。在安装过程中,可以使用PIP命令完成

  pip install selenium

  目前,selenium支持chrome和Firefox。最好选择chrome,因为互联网上有更多关于chrome的文档

  但是,在使用之前,除了确保安装了Chrome浏览器外,还需要确保还安装了chromedriver.exe工具(selenium的核心是webdriver,chromedriver.exe是Chrome的webdriver工具)

  chromedriver的版本需要与Chrome浏览器的版本相对应。你可以在本地下载

  

  下载地址如下:

  二,。爬虫逻辑

  要使用selenium捕获JD数据以模拟人工操作,必须依次执行以下步骤(这里以捕获Python书籍商品为例):

  

  首先,您需要初始化并创建webdriver的Chrome浏览器和数据存储文件(这里我使用TXT文件)

  def __init__(self,item_name,txt_path):

url = 'https://www.jd.com/' # 登录网址

self.url = url

self.item_name = item_name

self.txt_file = open(txt_path,encoding='utf-8',mode='w+')

options = webdriver.ChromeOptions() # 谷歌选项

# 设置为开发者模式,避免被识别

options.add_experimental_option('excludeSwitches',

['enable-automation'])

self.browser = webdriver.Chrome(executable_path= "C:/Program Files/Google/Chrome/Application/chromedriver.exe",

options = options)

self.wait = WebDriverWait(self.browser,2)

  网络驱动程序。Chrome()方法用于创建受驱动浏览器Chrome,并将路径分配给先前下载到可执行路径参数的本地chromedriver.exe文件夹

  当浏览器打开网页时,由于网络速度,可能会出现加载缓慢的问题。因此,webdriverwait方法用于创建等待方法。浏览器需要等待2秒钟才能执行下一个操作

  初始化操作完成后,主程序进行模拟访问、输入、点击等操作;我将所有这些操作封装到run()函数中

   def run(self):

"""登陆接口"""

self.browser.get(self.url)

input_edit = self.browser.find_element(By.CSS_SELECTOR,'#key')

input_edit.clear()

input_edit.send_keys(self.item_name)

search_button = self.browser.find_element(By.CSS_SELECTOR,'#search > div > div.form > button')

search_button.click()# 点击

time.sleep(2)

html = self.browser.page_source # 获取 html

self.parse_html(html)

current_url = self.browser.current_url # 获取当前页面 url

initial_url = str(current_url).split('&pvid')[0]

for i in range(1,100):

try:

print('正在解析----------------{}图片'.format(str(i)))

next_page_url = initial_url + '&page={}&s={}&click=0'.format(str(i*2+1),str(i*60+1))

print(next_page_url)

self.browser.get(next_page_url)

self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_goodsList > ul > li')))

html = self.browser.page_source

self.parse_html(html)# 对 html 网址进行解析

time.sleep(2) # 设置频率

except Exception as e:

print('Error Next page',e)

self.txt_file.close()# 关闭 txt 文件

  首先,使用get()方法访问JD主页,然后在页面编辑、搜索按钮中找到搜索栏和搜索按钮标签输入;完成输入并单击操作

  对于网页元素标记定位,如果没有,可以使用浏览器开发人员模式将其分为以下步骤(以css_选择器为例):

  在翻页操作过程中,根据京东的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

  根据这一规则,京东商品信息的前100页是通过改变页面和S参数来构建的,以完成数据捕获

  对于数据提取部分,我使用parse_uhtml函数

  

  为了提高程序的友好性,我将所有函数封装到一个类中。用户只需输入两个参数,一个是所需的采集商品名称,另一个是存储文件路径;可以完成数据爬网

  

  最后,将抓取的数据存储在TXT文件中,结果如下

  

  四,。总结

  尽管selenium已经有效地破解了web端的一些反爬行机制,但对于某些网站应用程序(如pull hook)来说,它是无用的。当您使用selenium驱动浏览器模拟pull hook官方网站上的翻页操作时,网站可以识别非人工操作、阻止IP并发出警告

  本文涉及的完整源代码文章请关注微信公众号:小张python,后台回复关键词:京东商品即可获得

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线