爬虫---整理总结

爬虫—整理总结

请求库:

一、requests

安装第三方库: requests;

导入第三方库:import requests

1.请求网络数据: requests.get(请求地址)
response = requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js')
2.设置解码方式(乱码的是需要设置 - 一定要在获取请求结果之前设置)
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.创建浏览器对象
b = Chrome()
2.打开网页(需要爬那个页面的数据,就打开那个页面对应的网页地址)
b.get('https://movie.douban.com/top250?start=0&filter=')
3.获取网页源代码(注意:不管以什么样的方式更新了界面内容,page_source的内容也会更新)
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’)
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选择器选中的第一个标签

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

# 获取整个网页中的第一个标签,返回值是标签对象----->也就是整个网页中的第一个

标签
result = soup.select_one('p') # 获取整个网页中
标签下的所有后代

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

result = box1.select('p')   # 获取box1下的所有

标签
p1 = soup.select_one('span>p') # 获取整个网页中标签下的第一个

标签
a1 = box1.select_one('a') # 获取box1中的第一个标签
3.获取标签内容和标签属性

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

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

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(“属性名”)

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

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)

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:

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:

# 接着获取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:

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

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=')

你可能感兴趣的:(爬虫,python,chrome)