Xpath模块实战与selenuim模块基本使用
-
-
爬取猪八戒数据并写入表格
-
爬取贴吧图片数据
-
自动化测试工具selenuim模块

详细
-
爬取城市名称
思路
1、先查看页面加载方式,城市名称是直接加载的。
2、向该页面发送get请求,收到状态码为403的响应,说明该网站有防爬措施。
3、在请求头中加入User-Agent参数模拟浏览器的标识。
4、利用响应内容构造xpath对象。
5、使用xpath,先明确需要查找的标签,往上查找具有一定特征的祖先标签,再逐级往下查找到名称标签,获取城市名称。
6、如果想要获取页面所有城市名称,即同时获取多个标签位置的数据,可以在xpath的参数中写入多条标签路径并用 | 分割。
import requests from lxml import etree # 1.基础链接 cityUrl = 'https://www.aqistudy.cn/historydata/' # 2.发送请求 cityRes = requests.get(cityUrl, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'} ) # 3.生成xpath对象 cityHtml = etree.HTML(cityRes.text) # 4.获取热门城市名称列表 hotCityList = cityHtml.xpath('//div[@class="hot"]/div[2]/ul/li/a/text()') # print(hotCityList) # 5.获取全部城市名称列表 allCityList = cityHtml.xpath('//div[@class="all"]/div[2]/ul/div[2]/li/a/text()') # print(allCityList) # 6.获取该页面全部城市名称 allCityNames = cityHtml.xpath('//div[@class="hot"]/div[2]/ul/li/a/text() | //div[@class="all"]/div[2]/ul/div[2]/li/a/text()') print(allCityNames)




-
爬取猪八戒数据并写入表格
思路
import requests from lxml import etree from openpyxl import Workbook # 1.创建Excel表格文件对象 wbWork = Workbook() ws1 = wbWork.create_sheet('工作内容', 0) ws1.append(['公司名称', '地址', '工作内容描述', '订单价格', '历史成交量(近半年)']) def getWork(kw): """ 获取工作相关订单信息 """ # 1.设置网页基本链接 workUrl = 'https://shanghai.zbj.com/search/f' # 2.发送请求获取页面数据 workRes = requests.get(workUrl, params={'kw': kw} ) # 3.生成xpath对象 workHtml = etree.HTML(workRes.text) '''直接查找很多时候是无法使用的 因为会出现数据混乱的现象''' # companyName = workHtml.xpath('//div[@class="new-service-wrap"]/div/div/div/a/div[1]/p/text()') # print(companyName) # 4.先查找所有含有数据的div,再依次循环 divList = workHtml.xpath('//div[@class="new-service-wrap"]/div') # 5.循环工作订单信息 for div in divList: # 6.获取公司名称 companyName = div.xpath('./div/div/a/div[1]/p/text()') # 7.发现有广告位,名称列表存在空值,添加判断 if not companyName: continue # 8.去列表末位去除空格获取公司名称 cName = companyName[-1].strip() # 9.获取公司地址 addressInfo = div.xpath('./div/div/a/div[1]/div/span/text()')[0] # 10.获取订单价格 price = div.xpath('./div/div/a[2]/div[2]/div[1]/span[1]/text()')[0] # 11.获取成交量 amount = div.xpath('./div/div/a[2]/div[2]/div[1]/span[2]/text()')[0].strip('近半年成交:') # 12.工作内容 desc = div.xpath('./div/div/a[2]/div[2]/div[2]/p//text()') # print(''.join(desc)) # 13.添加至Excel表格 ws1.append([cName, addressInfo, ''.join(desc), price, amount]) # 输入搜索关键字 kw = input('请输入工作内容: ').strip() # 调用方法 getWork(kw) wbWork.save('{}工作订单.xlsx'.format(kw))




-
爬取贴吧图片数据
# 分析不同贴吧地址可知:kw参数不同,可以将kw参数作为用户可更改的变量传入 https://tieba.baidu.com/f?ie=utf-8&kw=%E4%B8%83%E9%BE%99%E7%8F%A0&fr=search https://tieba.baidu.com/f?ie=utf-8&kw=%E7%BE%8E%E5%A5%B3&fr=search https://tieba.baidu.com/f?ie=utf-8&kw=%E8%BE%A3%E5%A6%B9&fr=search # 思路 1.先获取每个帖子的链接 2.再发送请求 3.在帖子内筛选出图片



import time import os import requests from lxml import etree def getTiebaImg(tName, pageNum): """ 获取贴吧图片 tName: 贴吧名 """ # 1.设置搜索基础地址和贴吧地址 searchUrl = 'https://tieba.baidu.com/f' baseUrl = 'https://tieba.baidu.com' # 2.发送请求 # TODO:多页数据 只需要再加一个pn参数即可 tRes = requests.get(searchUrl, params={'kw': tName, 'pn': (pageNum-1) * 50 } ) # 3.利用响应文本生成xpath对象 tHtml = etree.HTML(tRes.text) # print(tRes.text) # 4.循环帖子链接,拼接成完整地址,再向每个帖子发送请求 aLinkList = tHtml.xpath('//a[@class="j_th_tit "]/@href') for link in aLinkList: fullLink = baseUrl + link # 5.向帖子发送请求 tieRes = requests.get(fullLink) tieHtml = etree.HTML(tieRes.text) # 6.获取图片链接 imgSrcList = tieHtml.xpath('//img[@class="BDE_Image"]/@src') # print(imgSrcList) """主动延迟""" time.sleep(2) for imgSrc in imgSrcList: # 7.向图片地址发送请求 imgRes = requests.get(imgSrc) # 8.拼接文件路径并保存 filePath = os.path.join(tiebaName, imgSrc[-16:]) with open(filePath, 'wb') as f: f.write(imgRes.content) print('{}下载完成'.format(imgSrc[-16:])) """主动延迟""" time.sleep(1) # 获取用户想要爬取的贴吧名称、页数 tiebaName = input('请输入你想要获得哪个贴吧的图片: ').strip() pn = int(input('请输入你想要搜索的页数: ').strip()) # 判断是否存在名称为当前贴吧名称的文件夹 if not os.path.exists(tiebaName): os.mkdir(tiebaName) # 调用函数 for n in range(1, pn + 1): getTiebaImg(tiebaName, pn)
# 1.需要下载第三方模块 pip3 install selenium # 2.需要下载驱动(必备) 该模块用于操作浏览器,针对浏览器需要不同的驱动程序
http://npm.taobao.org/mirrors/chromedriver/2.35/ # 3.存放位置 1.当前编程环境(不推荐) 2.任意位置,需要绝对路径(不推荐) 3.Python解释器的scripts目录中 注意:
有时候下载了驱动可能也无法操作浏览器 原因:可能是因为驱动版本不对 措施:重新一个版本的驱动
测试小案例
from selenium import webdriver import time # 1.指定操作的浏览器驱动(简单粗暴版,不推荐) # 如果找不到,可以手动配置浏览器绝对路径 # options = webdriver.ChromeOptions() # options.binary_location = "C:\Program Files\Google\Chrome\Application\chrome.exe" # bro = webdriver.Chrome(chrome_options=options) # 1.指定操作的浏览器驱动 bro = webdriver.Chrome() # 2.控制浏览器访问网站 bro.get('https://www.baidu.com') # 关闭浏览器 time.sleep(3) bro.close()
基本操作
1.find_element_by_id 根据id查找网页上的元素
eg:divTag = bro.find_element_by_id('s-top-left')

2.find_elementg_by_link_text 根据链接的文本找到a标签
eg:aTag = bro.find_element_by_link_text("新闻")

3.find_element_by_partial_link_text 根据链接文本模糊查找a标签

4.find_element_by_tag_name 根据标签名查找
5.find_element_by_class_name 根据类名查找
eg:tag = bro.find_element_by_class_name("mnav")

6.find_element_by_name 根据名称属性查找
7.find_element_by_css_selector 根据CSS选择器查找
8.find_element_by_xpath 根据xpath查找




浙公网安备 33010602011771号