python简单数据抓取五(如何让京东商品页显示60条数据、利用软件驱动实现超级鹰用户自动登录)

学习目标:

python学习二十五—简单数据抓取五


学习内容:

  • 京东显示商品信息的页面,会首先显示前30个商品数据(page=1的数据),利用ajax奇数替换出后30个商品数据(page=2的数据)

1、改变url的放式抓取到一整页60个京东商品(即page=1,和page=2)的信息
2、请求一个奇数页面(page=1)之后,紧接着的偶数页面(page=2)的链接在奇数链接的基础上加上后30个商品的编号,就能显示60个商品信息
3、利用自动化软件获取到京东页面一整页(即page=1,和page=2)60个商品信息


1、改变url的放式抓取到一整页(即page=1,和page=2)的信息

import requests
import re
import pymysql
from lxml import etree
headers = {
     
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
connectes = pymysql.connect(database='zhuaqu', user='root', password='1234', host='127.0.0.1', charset='utf8')
cursor = connectes.cursor()
for i in range(3, 5):
    # 将i转化为字符串
    j = str(i)
    a = 'https://search.jd.com/Search?keyword=大地瓜&qrst=1&stock=1&page=P&s=57&click=0'
    # 用sub将i的值替换到page=P处
    b = re.sub('P', j, a)
    source = requests.get(b, headers=headers).text
    base = etree.HTML(source).xpath('// *[ @ id = "J_goodsList"] / ul / li')
    for i in base:
        price = i.xpath('div / div[2] / strong/i/text()')
        goods_name = i.xpath(' div / div[3] / a / em/text()')
        dian = i.xpath('div / div[5] / span / a/text()')
        # 将数据存入数据库
        sql = 'insert into goods(price, goods_name, goods_dian ) value ("{}", "{}", "{}")'.format(price, goods_name, dian)
        # 用ping命令在每次传输之前测试与数据库的连通性
        connectes.ping(reconnect=True)
        cursor.execute(sql)
        connectes.commit()
        connectes.close()

2、请求一个奇数页面(page=1)之后,紧接着的偶数页面(page=2)的链接在奇数链接的基础上加上后30个商品的编号,就能显示60个商品信息

import requests
import re
from lxml import etree
# header头
headers = {
     
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
    'referer': 'https://search.jd.com/Search?keyword=%E5%A4%A7%E5%9C%B0%E7%93%9C&qrst=1&wq=%E5%A4%A7%E5%9C%B0%E7%93%9C&stock=1&page=3&s=56&click=0'
}

# 请求奇数页面page为3的网页代码
source = requests.get('https://search.jd.com/Search?keyword=%E5%A4%A7%E5%9C%B0%E7%93%9C&qrst=1&wq=%E5%A4%A7%E5%9C%B0%E7%93%9C&stock=1&page=3&s=56&click=0', headers=headers).text

# 用正则在数页面的接口中匹配出后三十个商品的编码
demo = re.compile("wids:'(.*?)'")
lists = demo.findall(source)

# 将不匹配出的编码加到上一个奇数链接后面,组成偶数页面的链接
source1 = requests.get('https://search.jd.com/Search?keyword=%E5%A4%A7%E5%9C%B0%E7%93%9C&qrst=1&wq=%E5%A4%A7%E5%9C%B0%E7%93%9C&stock=1&page=3&s=56&click=0'+ lists[0], headers=headers).text

# 分别用xpath匹配出商品的价格
price = etree.HTML(source).xpath('//*[@id="J_goodsList"]/ul/li/div/div[2]/strong/i/text()')
price1 = etree.HTML(source1).xpath('//*[@id="J_goodsList"]/ul/li/div/div[2]/strong/i/text()')

# 最后打印上下页即京东页面一整页的60个商品的价格
print(price)
print(price1)

3、利用自动化软件获取到京东页面一整页(即page=1,和page=2)60个商品信息,以及自动输入用户信息登录超级鹰网站

  • 引入from selenium import webdriver包,没有selenium就下载到python
  • 谷歌驱动中心下载chromedriver.exe驱动软件
  • 该环境自动化软件可以打开一个浏览器,并获得页面的源码

1、一次性生成京东网页ajax替换后的页面即60个商品的全部数据

import re
# 延迟使用的包
import time
from lxml import etree
# 引入使用该驱动的包
from selenium import webdriver

# 找到本地驱动软件所在位置并启动该驱动软件
dr = webdriver.Chrome('F:\\pycharm\\anicod\\chromedriver.exe')

# 利用该驱动软件打开京东的商品页面
dr.get('https://search.jd.com/Search?keyword=%E5%A4%A7%E5%9C%B0%E7%93%9C&qrst=1&wq=%E5%A4%A7%E5%9C%B0%E7%93%9C&stock=1&page=3&s=56&click=0')

# 将页面全部显示,即展示60个商品的页面(完成ajax页面替换后的整个页面)
dr.maximize_window()

# 用js代码模拟滑动网页滑块,将页面滑到最底部
js = "var q=document.documentElement.scrollTop=10000"

# 执行该js代码
dr.execute_script(js)

# 延迟2s
time.sleep(2)

# 获取驱动打开页面的源码
source = dr.page_source

# 在源码中用xpath匹配出需要的价格信息
price1 = etree.HTML(source).xpath('//li/div/div[2]/strong/i/text()')

# 打印并展示商品价格信息,还有该页商品总数
print(len(price1), price1)

2、自动输入用户信息登录超级鹰网站

import re
import time
from lxml import etree
# 引入使用该驱动的包
from selenium import webdriver

# 找到本地驱动软件所在位置并抵用该驱动软件
dr = webdriver.Chrome('F:\\pycharm\\anicod\\chromedriver.exe')

# 打开超级鹰登录页面
dr.get('https://www.chaojiying.com/user/login/')

# 利用驱动找到用户名的输入框,先清空框里的信息
dr.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').clear()

# 利用驱动找到用户名的输入框,然后填入用户名信息send_keys包含的内容
dr.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').send_keys('超级鹰登录密码')

# 利用驱动找到密码的输入框,先清空框里的信息
dr.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input')

# 利用驱动找到密码的输入框,然后填入密码信息send_keys包含的内容
dr.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input').send_keys('超级鹰登录用户名')

# 延迟10s,方便页面打开后手动输入图片中的验证码
time.sleep(10)

# 利用驱动找到登录的点击摁钮,并点击摁钮登录到用户界面
dr.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input').click()

你可能感兴趣的:(xpath,selenium,python,软件测试,爬虫)