网页抓取qq(python学习二十五——简单数据抓取五学习内容:python )
优采云 发布时间: 2022-04-01 10:03网页抓取qq(python学习二十五——简单数据抓取五学习内容:python
)
学习目标:Python学习二十五——简单数据捕捉五 学习内容:
1、更改url方式抓取一整页60条京东产品(即page=1,page=2)信息
2、请求奇数页(page=1)之后,下一个偶数页(page=2))的链接是基于奇数链接的加上最后30个商品编号,可以显示60条商品信息
3、使用自动化软件获取京东页面的整页(即page=1,page=2)60条产品信息
4、自动输入用户信息登录超级鹰网站
5、使用iframe元素自动打开QQ空间密码登录页面
1、改变url的release抓取一整页(即page=1,page=2)information
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条产品信息,并自动输入用户信息登录超鹰< @网站
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)
4、自动输入用户信息登录超级鹰网站
建议:浏览器缩放为100%,那么显示缩放也应为100%
5、使用iframe元素自动打开QQ空间密码登录页面
from selenium import webdriver
# 引入智能延迟的包
from selenium.webdriver.support.ui import WebDriverWait
import time
dr = webdriver.Chrome('F:\\pycharm\\anicod\\chromedriver.exe')
dr.get('https://qzone.qq.com/')
dr.maximize_window()
# 首先找到iframe元素以便打开密码登录页面
iframe = dr.find_element_by_tag_name('iframe')
# 选择iframe元素
dr.switch_to.frame(iframe)
time.sleep(1)
# 智能延迟等待密码登录页面打开
WebDriverWait(dr, 10).until(lambda the_driver:
the_driver.find_element_by_xpath('//*[@id="switcher_plogin"]').is_displayed())
# xpath获取到密码登录摁钮并点击
dr.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
# xpath获取到用户名输入框并输入用户名
dr.find_element_by_xpath('//*[@id="u"]').send_keys('qq号')
# xpath获取到密码输入框并输入密码
dr.find_element_by_id("p").send_keys("qq密码")
# 点击登录
dr.find_element_by_id("login_button").click()