例1:
爬取抽屉新热榜示例:
有些网站没有任何反爬机制,如汽车之家,任何人来了都能爬取,而有些网站设置了反扒机制,如
import requests
response = requests.get('https://dig.chouti.com/')
print(response.text)
运行结果
不能获取到网页内容,因为伪装成浏览器时不像浏览器,而发送请求本质是发送请求头和请求体。
看看网络的请求头信息:
如果能像浏览器那样发送以上数据,就分别不出是代码还是浏览器,就能获取到response
import requests
response = requests.get(
url = 'https://dig.chouti.com/',
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'}
) # user-agent:用什么设备发送请求
print(response.text)
运行结果
一般携带user-agent就行了,还有一些网站需要带hosts,或者别的,可以一个一个放到get的参数中,最后肯定能成功,因为和浏览器一模一样的了
需要获取的内容
所有列表显示时是模版语言做的for循环,所以每个样式都是一样的。找到一个后就可以找到列表中所有内容
import requests
from bs4 import BeautifulSoup
response = requests.get(
url = 'https://dig.chouti.com/',
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'}
) # user-agent:用什么设备发送请求
soup = BeautifulSoup(response.text, 'html.parser') # 把字符串变成对象(html标签),对象中嵌套对象,通过标签名找到该对象
content_list = soup.find(name='div', id='content-list') # 找到第一个标签对象,只有标签对象才能往下find或find_all
item_list = content_list.find_all(name='div', attrs={
'class':'item'}) # 列表,列表中为每个便签对象,标签对象可以使用find和find_all方法
for item in item_list:
a = item.find(name='a', attrs={
'class':'sho