Python-6

第七天
Beautifulsoup用法
1、用途:
BeautifulSoup是一个工具箱,通过解析文档为用户提供需要抓取的数据,可以从HTML或XML文件中提取数据;BeautifulSoup除了支持Python标准库中的HTML解析器,还支持一些第三方的解析器
安装方式:pip install bs4

设置中找项目翻译器点击加号添加即可
2、BeautifulSoup解析器
(1)、Python标准库中的HTML解析器-BeautifulSoup(解析内容,“html.parser”)
特点:执行速度适中,文档容错能力强
(2)、lxml解析器
安装方式:pip install lxml
BeautifulSoup(解析内容,’'lxml’)
特点:速度快、文档容错能力强
3、用法
(1)、直接从Beautifulsoup中对象中提取标签
from urllib.request import urlopen
from bs4 import BeautifulSoup

if name == ‘main’:
url = “http://www.pythonscraping.com/pages/page1.html”
response = urlopen(url) # 发送请求,返回响应
bs = BeautifulSoup(response,“lxml”) # 创建BeautifulSoup对象,并传递响应对象和lxml解析器标识
print(“获取h1标签:”,bs.h1)
print(“获取h1标签里的文本内容:”,bs.h1.text)
print(“通过标签解构获取h1标签:”,bs.html.body.h1)
print(“通过标签解构获取h1标签:”, bs.body.h1)
print(“通过标签解构获取h1标签:”, bs.html.h1)
(2)、find()与findAll()

参数解释:
name(第一个参数):标签名称,可以传一个标签的名称或者由多个标签组成的“容器”
attrs: 用一个Python字典封装一个标签的若干属性和对应的属性值
查找所有匹配的子标签findAll():

if name == ‘main’:
url = “http://www.pythonscraping.com/pages/warandpeace.html”
response = urlopen(url) # 发送请求,返回响应
bs = BeautifulSoup(response,“html.parser”)
spans = bs.findAll(“span”,attrs={“class”:“green”}) # 爬取所有标签名为span,属性名为class,属性值为"green"的标签
for span in spans:
print(span.text) # 获取标签内部的文本内容

查找第一个匹配的字标签find():
if name == ‘main’:
url = “http://www.pythonscraping.com/pages/warandpeace.html”
response = urlopen(url) # 发送请求,返回响应
bs = BeautifulSoup(response,“html.parser”)
span = bs.find(“span”,attrs={“class”:“green”}) # 爬取第一个标签名为span,属性名为class,属性值为"green"的标签
print(span.text) # 获取标签内部的文本内容
(3)、子标签与后代标签
子标签:
if name == ‘main’:
url = “http://www.pythonscraping.com/pages/page3.html”
response = urlopen(url)
bs = BeautifulSoup(response,“lxml”)
for child in bs.find(“table”,attrs={“id”:“giftList”}).children: # 遍历table标签的子标签
print(child)
后代标签:
使用descendants属性
if name == ‘main’:
url = “http://www.pythonscraping.com/pages/page3.html”
response = urlopen(url)
bs = BeautifulSoup(response,“lxml”)
for des in bs.find(“table”,attrs={“id”:“giftList”}).descendants: # 遍历table标签的后代标签
print(des)
(4)、兄弟标签
if name == ‘main’:
url = “http://www.pythonscraping.com/pages/page3.html”
response = urlopen(url)
bs = BeautifulSoup(response,“lxml”)
print(“第一个tr后面的所有兄弟标签:”)
for sibling in bs.find(“table”,attrs={“id”:“giftList”}).tr.next_siblings:
print(sibling)

print("*"*30)
print("第一个tr连续两个后面的兄弟标签里面的内容:")
for sibling in bs.find("table",attrs={"id":"giftList"}).tr.next_sibling.next_sibling:
    print(sibling)

注意:还有next_sibling、previous_sibling、next_siblings、previous_siblings
XPath与Selenium
XPath
XPath 是一门在 XML 文档中查找信息的语言
1、 使用步骤
(1)、在谷歌浏览器安装XPath插件
下载xpath helper插件
xpath-helper.crx
谷歌浏览器点击右上角的“三点”按钮–》更多工具–》扩展程序
将xpath-helper.crx拖动到谷歌浏览器的扩展程序页面(有些版本需要将其压缩后rar放在谷歌的安装路径下)

XPath快捷键
打开和关闭xpath helper的快捷键都是:ctrl + shift + x
按住shift移动鼠标可使用XPath选中元素
(2)、使用
from urllib.request import urlopen,Request
from lxml.etree import HTML

if name == ‘main’:
url = “https://www.xiaohua.com/”
response1 = urlopen(url) # 向笑话网发送请求,返回响应
html = HTML(response1.read().decode())
pic_paths = html.xpath(“//div[@class=‘one-cont-font clearfix’]//img/@src”)
header_dict = {
“User-Agent”: “Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36”,
“Referer”: “https://www.xiaohua.com/” # 网站来路
}
for pic_path in pic_paths:
dest_path = “./images/” + pic_path.split(“/”)[-1] # 拼接下载图片的目标地址
r = Request(pic_path,headers=header_dict) # 构造Request对象,封装了头像图片的地址
response2 = urlopen® # 向头像图片地址发送请求
with open(dest_path,‘wb’) as f:
f.write(response2.read()) # 写入图片二进制数据
print(pic_path+“下载成功!”)
结果为:

这是因为原本网址只是一个存储单元,并非真正内容,在
dest_path = “./images/” + pic_path.split(“/”)[-1] # 拼接下载图片的目标地址
在写明地址下查看才可:

Selenium
自动化测试工具,支持多种浏览器。爬虫中主要用来模拟浏览器操作与解决JavaScript渲染的问题。
(1)、安装:
pip install selenium
注意:要使用Selenium,则需要针对浏览器的版本安装浏览器驱动程序

(2)、作用:模拟浏览器功能,自动执行网页中的js代码,实现动态加载
import time
from selenium.webdriver import Chrome

if name == ‘main’:
# 创建浏览器对象,指定浏览器驱动的位置
browser = Chrome(“C:\Users\admin\AppData\Local\Google\Chrome\Application\chromedriver.exe”)
browser.get(“https://www.baidu.com”) # 发送请求
element_input = browser.find_element_by_id(“kw”) # 获取ID为kw的元素(搜索框)
element_input.send_keys(“孙子兵法”) # 在文本框中输入内容
element_ok = browser.find_element_by_id(“su”) # 获取ID为su的元素(提交按钮)
element_ok.click() # 点击按钮
time.sleep(1) # 休眠1秒
browser.execute_script(“document.documentElement.scrollTop=10000”)
常用定位方法(使用browser对象):
find_element_by_id
find_elements_by_name
find_elements_by_xpath
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
find_elements_by_link_text
访问元素信息
获取元素属性
.get_attribute(‘class’)
获取元素文本
.text
获取id
.id
获取标签名
.tag_name
模拟交互操作
点击click()
输入内容send_keys()
模拟JS滚动
document.documentElement.scrollTop=10000
browser对象.execute_script() 执行js代码
获取网页源代码
page_source
browser对象.page_source
获取网页源代码
page_source
browser对象.page_source
模拟退出
browser对象.quit()
设置webdriver.Chrome()选项
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument(“–headless”) # 浏览器后台运行
options.add_argument(“–disable-gpu”) # 使浏览器的gpu失效
webdriver.Chrome(r"chromedriver.exe路径",chrome_options=options) # 将option选项添加到Chrome对象中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值