动态爬取京东之---selenium+beautifulsoup+xpath提取
程序员文章站
2022-05-20 17:28:02
京东爬取1.思路1.通过selenium中的webdriver来进入需要爬取的物品输入框2.由于是动态页面无法直接提取信息,所以需要通过写入js代码来模拟下拉操作3.通过bs4中的beautifulsoup来采集信息(我更喜欢xpath)4.通过启动模拟点击下一页按钮来实现跳转下页功能2.代码展示#!/usr/bin/python# -*- coding: utf-8 -*-import timefrom selenium import webdriverfrom selenium.w...
京东爬取
1.思路
1.通过selenium中的webdriver来进入需要爬取的物品输入框
2.由于是动态页面无法直接提取信息,所以需要通过写入js代码来模拟下拉操作
3.通过bs4中的beautifulsoup来采集信息(我更喜欢xpath)
4.通过启动模拟点击下一页按钮来实现跳转下页功能
2.代码展示
#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as bs
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
#打开目标网址
search = input('请输入要搜索的商品:')
driver = webdriver.Chrome(executable_path='chromedriver.exe',chrome_options=chrome_options)#声明谷歌浏览器对象
first_url = 'https://www.jd.com/' #入口url
driver.get(first_url)
# driver.maximize_window() #窗口最大化
#找到搜索框
driver.find_element_by_xpath('//*[@id="key"]').clear()
#传入商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(search)
#搜索商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(Keys.ENTER)
index = 0
for page in range(1,6):
# 声明基础高度
height = 0
for i in range(1, 11):
js = 'var q=document.documentElement.scrollTop=%s' % height
height += 800
driver.execute_script(js)
time.sleep(1)
# 利用bs4采集相关信息
text = driver.page_source
soup = bs(text, 'html.parser')
lis = soup.find_all('li', class_='gl-item')
for li in lis:
print("*"*100)
index += 1
print(li.find('div',class_='p-price').text.strip())
print(li.find('div', class_='p-name').text.strip())
print(li.find('div', class_='p-shop').text.strip())
print('http:'+li.find('div', class_='p-img').a.img.attrs['src'])
time.sleep(3)
driver.find_elements_by_xpath('//*[@id="J_bottomPage"]/span[1]/a')[-1].click()
print('总数据总量{}条'.format(index))
3.代码详解
#打开目标网址
search = input('请输入要搜索的商品:')
driver = webdriver.Chrome(executable_path='chromedriver.exe',chrome_options=chrome_options)#声明谷歌浏览器对象
first_url = 'https://www.jd.com/' #入口url
driver.get(first_url)
# driver.maximize_window() #窗口最大化
#找到搜索框
driver.find_element_by_xpath('//*[@id="key"]').clear()
#传入商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(search)
#搜索商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(Keys.ENTER)
这些代码是通过selenium来获取商品的详情页,其中下面三行代码是为了加快爬取速度而采取无头模式。(执行过程不显示)
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
# 声明基础高度
height = 0
for i in range(1, 11):
js = 'var q=document.documentElement.scrollTop=%s' % height
height += 800
driver.execute_script(js)
time.sleep(1)
这些代码是通过js修改下拉框的参数从而模拟下拉操作。
# 利用bs4采集相关信息
text = driver.page_source
soup = bs(text, 'html.parser')
lis = soup.find_all('li', class_='gl-item')
for li in lis:
print("*"*100)
index += 1
print(li.find('div',class_='p-price').text.strip())
print(li.find('div', class_='p-name').text.strip())
print(li.find('div', class_='p-shop').text.strip())
print('http:'+li.find('div', class_='p-img').a.img.attrs['src'])
这些事通过bs4,来获取需要的数据
driver.find_elements_by_xpath('//*[@id="J_bottomPage"]/span[1]/a')[-1].click()
driver.find_elements_by_xpath('//*[@id="J_bottomPage"]/span[1]/a')[-1].send_keys(Keys.RETURN)
以上两种选择其中一个来实现跳转页功能,外面还有一个循环来实现页数的控制,第一个直接通过点击,第二个是通过模拟键盘的右方向键。
4.效果图
本文地址:https://blog.csdn.net/ZXCNIUBI/article/details/107579190
推荐阅读
-
动态爬取京东之---selenium+beautifulsoup+xpath提取
-
Python3爬虫(十三) 爬取动态页之Selenium
-
动态爬取京东之---selenium+beautifulsoup+xpath提取
-
java爬虫webmagic 案例爬取动态(ajax+js) 网站京东售价格
-
python:爬虫之Post请求以及动态Ajax数据的爬取(3)
-
爬虫实战之selenium爬取京东电商数据
-
Python动态网页爬虫之爬取知乎话题回答
-
Python网络爬虫之动态网页爬取及使用selenium模块爬取
-
Python爬虫小白入门经典之爬取动态网页高德地图信息
-
网络爬虫(二)之动态网页爬取及使用selenium模块爬取