本次爬虫主要用到的模块是requests、csv、re正则表达式,非常基础的入门案例。
本次爬取的目标是虎扑体育威少36+10超强表现的帖子评论。
下面附上源代码及注释
import csv
import re
import requests
url = 'https://bbs.hupu.com/58998104.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/78.0.3904.108 Safari/537.36'}
respon = requests.get(url,headers=headers)
tod = respon.content.decode('utf-8')
将我们的url路径复制并指定,如果说是多页面爬取我们不能对url写死,具体操作下次会发布。后我们通过模拟请求头来模拟浏览器对网页进行请求。将我们的爬取结果,也就是该网页的HTML代码放入respon对象中,并且对该对象进行编码格式指定,通常中文页面使用的都是指定UTF-8。
# 通过正则表达式清洗出我们所需要的数据
yonghu = re.findall(
'<a href=".*?" target="_blank" class="post-reply-list-user-info-top-name" rel="noreferrer">(.*?)</a>', tod)
comment = re.findall('<div class="thread-content-detail">.*?<p>(.*?)</p>', tod)
print(yonghu, comment)
由于我们所需要爬取的是评论用户名及其发布的评论,我们需要对两者通过正侧表达式筛选,常用的也有Xpath,网页元素的筛选我们可以通过浏览器控制台的指向功能超找到元素所在标签。
右击可以选择复制标签或者对应的Xpath,将其放入我们的findall方法中,通过正则表达式筛选所需数据。有了数据接下来我们要对数据进行写入。
with open('威少.csv', 'a', encoding='utf-8') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(["用户", "评价"])
# csv_writer.writerows([data])
for i in range(len(yonghu)):
print(yonghu[i], comment[i])
csv_writer.writerow([yonghu[i], comment[i]])
该段代码实现的是创建一个名为威少的csv文件,表头写入用户及评价,通过对结果列表的长度的遍历,将结果挨个写入文件,很多时候会出现乱码现象,这个可以使用notepad++对文本编码格式指定UTF-8来解决。接下来附上结果及整段源码。
import csv
import re
import requests
url = 'https://bbs.hupu.com/58998104.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/78.0.3904.108 Safari/537.36'}
respon = requests.get(url,headers=headers)
tod = respon.content.decode('utf-8')
# 通过正则表达式清洗出我们所需要的数据
yonghu = re.findall(
'<a href=".*?" target="_blank" class="post-reply-list-user-info-top-name" rel="noreferrer">(.*?)</a>', tod)
comment = re.findall('<div class="thread-content-detail">.*?<p>(.*?)</p>', tod)
print(yonghu, comment)
# 将内容列表list通过遍历写入csv
with open('威少.csv', 'a', encoding='utf-8') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(["用户", "评价"])
# csv_writer.writerows([data])
for i in range(len(yonghu)):
print(yonghu[i], comment[i])
csv_writer.writerow([yonghu[i], comment[i]])
对于有反扒机制的网站内容爬取,其难度必然有所增加,那么下次我们实现。