爬虫---整理总结

news/2024/7/19 12:28:03 标签: 爬虫, python, chrome

爬虫—整理总结

请求库:

一、requests

安装第三方库: requests;

导入第三方库:import requests

1.请求网络数据: requests.get(请求地址)
python">response = requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js')
2.设置解码方式(乱码的是需要设置 - 一定要在获取请求结果之前设置)
python">response.encoding = 'utf-8'
# 编码方式和解码方式必须相同
3.获取请求结果
1)获取请求结果对应的文本数据 - 爬网页------>> response.text
2)获取二进制格式的请求结果 - 下载图片、视频、音频------>> response.content
3)获取请求结果json转换的结果 - json接口------>> response.json()

二、selenium

第三方库: selenium

导入使用: from selenium.webdriver import Chrome (谷歌浏览器)

获取标签对象: from selenium.webdriver.common.by import By

1.创建浏览器对象
python">b = Chrome()
2.打开网页(需要爬那个页面的数据,就打开那个页面对应的网页地址)
python">b.get('https://movie.douban.com/top250?start=0&filter=')
3.获取网页源代码(注意:不管以什么样的方式更新了界面内容,page_source的内容也会更新)
python">print(b.page_source)        # 获取豆瓣电影top250的网页源代码

解析

一、解析库:bs4,lxml

bs4:

bs4(beautifulsoup4),它基于css选择器的网页解析器(css选择器: day2-csv和Bs4)

------>安装的时候装beautifulsoup4,使用的时候用bs4

安装库: beautifulsoup4

导入: from bs4 import BeautifulSoup

1.根据网页源代码创建soup对象: BeautifulSoup(网页源代码, ‘lxml’)
python">f = open('files/data.html', encoding='utf-8')  # 打开files文件夹中的html文件data.html
soup = BeautifulSoup(f.read(), 'lxml')    # 括号里面f.read()可以是任何html或xml数据
f.close()
2. 获取标签(css选择器直接获取网页标签)

soup对象.select(css选择器) - 获取整个网页中选择器选中的所有标签,返回值是一个列表,列表中的元素是标签对象(找不到返回空列表)

soup对象.select_one(css选择器) - 获取整个网页中选择器选中的第一个标签,返回值是标签对象(找不到返回None)

标签对象.select(css选择器) - 获取指定标签中css选择器选中的所有标签

标签对象.select_one(css选择器) - 获取指定标签中css选择器选中的第一个标签

python"># 获取整个网页中的P标签返回一个列表
result = soup.select('p')

# 获取整个网页中的第一个标签,返回值是标签对象----->也就是整个网页中的第一个<p></p>标签
result = soup.select_one('p')

# 获取整个网页中<div></div>标签下的所有后代<p></p>标签
result = soup.select('div p')
python"># 获取box1中的所有标签  
box1 = soup.select_one('#box1')   # 此时是将网页中id='box1'标签下的所有标签看作一个整体(类似于一个盒子)

result = box1.select('p')   # 获取box1下的所有<p></p>标签

p1 = soup.select_one('span>p') # 获取整个网页中<span></span>标签下的第一个<p></p>标签
a1 = box1.select_one('a')  # 获取box1中的第一个<a></a>标签
3.获取标签内容和标签属性

标签对象.text - 获取标签内容

标签对象.attrs[属性名] - 获取标签指定属性的值

python">print(a1.text)      # '我是超链接3'---a1标签在网页中对应的内容
print(a1.attrs['href'])     # 'https://www.baidu.com'---获取a1标签中'href'属性对应的属性值

二、selenium获取标签(主要用于:翻页—点击下一页):

获取标签对象导入: from selenium.webdriver.common.by import By

selenium获取标签得创建浏览器对象

浏览器对象.b.find_element(获取方式, 数据) — 返回符合条件的第一个标签,结果是标签对象
浏览器对象.b.find_elements(获取方式, 数据) — 返回符合条件的所有标签,结果是列表,列表中的元素是标签对象

1.获取方式:

By.ID - 通过ID属性值获取标签
By.CLASS_NAME - 通过class属性值获取标签
By.CSS_SELECTOR - 通过css选择器获取标签
By.LINK_TEXT - 通过a标签的标签内容获取标签
By.PARTIAL_LINK_TEXT - 通过a标签的标签内容获取标签

2.操作标签

1)输入框输入内容:输入框对应的标签.send_keys(‘内容’)
2)点击标签:标签对象.click()

3.获取标签内容和标签属性

find_element仅仅能够获取元素,不能够直接获取其中的数据

获取属性值时通过定位获取的标签对象的get_attribute函数,传入属性名,来获取属性的值--------->不能直接用标签对象.attrs[属性名]

标签对象.text—> 即element.text

------------获取标签内容

标签对象.get_attribute(“属性名”) —>即:element.get_attribute(“属性名”)

-----------获取标签指定属性的值

python">from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
b = Chrome()

b.get('https://movie.douban.com/top250?start=0&filter=')
# print(b.page_source)
# 下一页按钮标签
next = b.find_element(By.CLASS_NAME, 'next')
next_href = b.find_element(By.CSS_SELECTOR, '.next>a')
# 点击按钮
print(next.text, next_href.get_attribute('href'))

# 后页> https://movie.douban.com/top250?start=25&filter=

三、解析数据方式:

1.正则-------> day1-正则

2.bs4(css选择器,依赖lxml库)------> 如上解析库bs4部分

3.XPath------> day5-XPath

请求头headers

我们访问一个网页的时候,点击进去就是一个完整的浏览过程。当我们想要获取网页数据的时候,就要跟这种浏览过程一样,不然网页会把我们阻拦在外面。header就是帮助我们完成这样浏览过程的一个工具。给爬虫加一个header请求头,是常规的反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在浏览网站信息。

发送请求

添加header: a. 浏览器伪装(user-agent)、b.免密登录(cookie)、 c. 设置代理(proxies)

a. 浏览器伪装(user-agent)

python">import requests
headers = {
    # 发送请求的时候在请求头中添加cookie值
    'cookie': 'bid=58Gyjz_NAcA; ll="118318"; douban-fav-remind=1; viewed="36164018_36221918"; ap_v=0,6.0',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
# 可以自己在网页中查---检查---网络--->>
response = requests.get('https://movie.douban.com/top250', headers=headers)

b.免密登录(cookie) <-----为了爬网页时跳过登录界面

requests

# requests自动登录步骤
# 第一步:人工对需要自动登录网页进行登录
# 第二步:获取这个网站登录后的cookie信息
# 第三步:发送请求的时候在请求头中添加cookie值
# 如上面代码部分

selenium

selenium获取Cookie:

python">from selenium.webdriver import Chrome
# 1.创建浏览器打开需要自动登录的网页
b = Chrome()
b.get('https://www.taobao.com')

# 2.留足够长的时候,人工完成登录(必须得保证b指向的窗口的网页中能看到登录以后的信息)
input('是否已经完成登录:')  # ---此时在跳出来的网页上进行登录以获取Cookie,登陆后回车让后面的代码继续运行

# 3.获取登录成功后的cookie信息,保存到本地文件
result = b.get_cookies()
with open('files/taobao.txt', 'w', encoding='utf-8') as f:
    f.write(str(result))

selenium使用Cookie:

python"># 接着获取Cookie的代码部分---使用Cookie
# 获取本地保存的cookie
with open('files/taobao.txt', encoding='utf-8') as f:
    result = eval(f.read())
    
# 添加cookie
for x in result:
    b.add_cookie(x)

# 重新打开网页
b.get('https://www.taobao.com')  # 已免登录
input('end:')

c. 设置代理(proxies) <------解决IP被封

requests:

python">import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
# 创建代理
proxies = {
    'https': '116.140.52.224:4513'
}
# 使用代理ip发送请求
res = requests.get('https://movie.douban.com/top250?start=0&filter=', headers=headers, proxies=proxies)
print(res.text)

selenium

python">from selenium.webdriver import Chrome, ChromeOptions

options = ChromeOptions()
# 设置代理
options.add_argument('--proxy-server=http://180.127.245.154:4515')

b = Chrome(options=options)
b.get('https://movie.douban.com/top250?start=0&filter=')

http://www.niftyadmin.cn/n/191388.html

相关文章

vue 中引入 vue-router

H4 官方学习地址&#xff1a;https://v3.router.vuejs.org/zh/installation.html 备注&#xff1a;vue3 项目一般用的是 4.x的版本&#xff0c;这里我们项目用的是vue2 一般用的是3.x版本的&#xff1b; 安装 vue-router https://www.npmjs.com/package/vue-router?activeTab…

叶酸-聚乙二醇-氨基,FA-PEG-NH2在科研当中的作用和用途

FA-PEG-NH2 叶酸-聚乙二醇-氨基 中文名称&#xff1a;叶酸-聚乙二醇-氨基 英文名称&#xff1a;FA-PEG-NH2/Folic acid-PEG-Amine 溶剂&#xff1a;Water&#xff08;水&#xff09;、Methanol&#xff08;甲醇&#xff09;、 DMF、DMSO等常规有机溶剂。 性状&#xff1a;基于…

青龙面板怎么定时运行python脚本

青龙面板可以通过添加定时任务来实现定时运行Python脚本。 具体操作步骤如下&#xff1a; 在青龙面板首页点击“任务计划”进入任务计划页面。 点击“添加任务”按钮&#xff0c;选择“Shell脚本”类型。 在“命令”栏中输入Python脚本的绝对路径&#xff0c;如“/usr/local/…

大前端养成之路:学一点MongoDB(二)

MongoDB数据建模 MongoDB数据建模是使用MongoDB进行数据存储和管理的重要环节。下面将分为三部分&#xff0c;分别是数据建模基础知识、MongoDB数据建模原则以及数据建模案例实战。同时&#xff0c;还将使用node.js技术栈实现相关代码案例&#xff0c;以便更好地理解MongoDB数…

ThreeJS-平行光物体投影(十九)

平行光源&#xff08;太阳光&#xff09; 关键代码&#xff1a; //平行光投射相机的属性 // directionalLight.shadow.camera.near 0.5; directionalLight.shadow.camera.far 500; directionalLight.shadow.camera.top 3; di…

山东大学-飞桨人工智能教育创新中心正式挂牌,打造区域产教融合新范式

当前&#xff0c;生成式AI热潮推动&#xff0c;人工智能正驶入发展快车道&#xff0c;复合型AI人才需求攀升&#xff0c;产教融合持续深化。3月25日&#xff0c;在泉城济南&#xff0c;百度飞桨协同山东大学、济南大学、青岛理工大学&#xff0c;共同举办飞桨院长高峰论坛暨“中…

lwip中线程优先级的分配原则

lwip的线程 lwIP是一个嵌入式TCP/IP协议栈&#xff0c;它主要包含以下几个线程&#xff1a; 主线程&#xff08;Main Thread&#xff09;&#xff1a;它是lwIP的主线程&#xff0c;用于初始化lwIP协议栈和各种网络接口&#xff0c;并提供处理网络事件的主循环。主线程的优先级…

206. 反转链表

总结 方法&#xff1a; 迭代递归 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例2: 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例3: …