爬虫入门超清晰csv加正则表达式爬取虎扑评论(源码)

本次爬虫主要用到的模块是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]])

对于有反扒机制的网站内容爬取,其难度必然有所增加,那么下次我们实现。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值