前言
由于虎扑页面的限制,因为访问虎扑步行街的第11个页面就需要用户进行登录,鉴于此时技术还没有学全,只能爬取1到10的页面。
抓取什么数据
- 帖子名称
- 帖子链接
- 发帖人
- 发帖人链接
- 发帖时间
- 帖子回复数
- 帖子浏览数
- 最后回复帖子的人
- 最后回复的时间
如何抓取数据
-
首先我们发现这个页面是用gzip进行压缩的,gzip是用utf-8进行编码的,也就是我们抓取的页面是用utf-8编码的,而r.text返回的是unicode编码的字符串,如果我们直接用就会出现乱码,因此,我们用r.content,返回的bytes数据(抓取音频,文件),然后将这个页面从utf-8解码为unicode编码
html = r.content html = html.decode('utf-8') #将utf-8解码为unicode
- 抓取数据对应的字段的html标签(代码中看)
用Mongodb存放抓取到的数据
- 需要注意的问题,就是可能会出现本来在第一页的帖子,然后凉了啥的,被顶到了第二页,那么这时候就不能存放在数据库中,所以每次插入数据要进行判断一下
代码
import requests
from bs4 import BeautifulSoup
import time
from pymongo import MongoClient
def get_page(link):
data_list = []
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
}
r = requests.get(link, headers=headers)
html = r.content
html = html.decode('utf-8') #将utf-8解码为unicode
soup = BeautifulSoup(html, 'lxml')
for_list = soup.find('ul', class_="for-list")
for_list = for_list.find_all('li')
for each_for in for_list:
# 帖子名称
for_name