【Python爬虫练习】虎扑社区步行街版块首页信息爬取(BeautifulSoup+MongoDB)

4 篇文章 0 订阅
2 篇文章 0 订阅

严正声明:爬虫仅用于学习研究,不做商业或者其它非法用途!

首先我们要爬取的网页地址为:https://bbs.hupu.com/bxj 

页面的样子是这样的:

红色圈出来的部分就是我们所要爬取的内容信息。

接下来最重要的自然是页面元素的分析,这个就不多说了,这是爬虫代码编写的前提,也是最最基本、最最重要的部分。

简单的来说就是 右键想要爬取的内容,选择“检查”。需要大家了解一点html简单的入门知识就好了。

好了,话不多说,先上第一版代码,没有连接数据库,只是输出,这样也是为了保证数据在存入数据库之前是准确的。

#_*_ coding=UTF-8 _*_
import requests
from bs4 import BeautifulSoup

headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'}
link='https://bbs.hupu.com/bxj'
re=requests.get(link,headers=headers)
soup=BeautifulSoup(re.content,'lxml')
soup_list=soup.find('ul',class_='for-list')

li_list=soup_list.find_all('li')
for lli in li_list:
    title=lli.find('div',class_='titlelink box')
    print('标    题:'+title.a.string)#重点:NavigableString对象获取文本内容的方法
    print('标题链接:'+"https://bbs.hupu.com"+title.a['href'])#重点:获取标签内链接的方法
    author=lli.find('div',class_='author box')
    print('作    者:'+author.a.string)
    print('发布时间:'+author.contents[5].string)
    reply_view=lli.find('span',class_='ansour box')
    reply_view=reply_view.text.strip().split('/')#重点:对形如23/34这样的字符串进行分割
    print('回    复:'+reply_view[0].strip())#strip()不可省略,否则会有空格
    print('浏    览:'+reply_view[1].strip())
    endreply=lli.find('div',class_='endreply box')
    print('最后回复时间:'+endreply.a.string)
    print('最后回复链接:'+"https://bbs.hupu.com/"+endreply.a['href'])
    print('最后回复人  :'+endreply.span.string)
    print()
    

 接下来就是连接MongoDB数据库,它有一个好处就是我们不需要提前建立数据库以及表,当我们需要使用的数据库不存在时,它会主动建立,但是这里也要注意避免已有数据库的冲突。所以一般情况下,在数据插入之前最好先做检查。

上代码:

#_*_ coding=UTF-8 _*_
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient

client=MongoClient('localhost',27017)#建立客户端对象
hupu=client.hupu#链接数据库hupu,没有则自动建立
post=hupu.post#使用post集合,没有则自动建立

headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'}
link='https://bbs.hupu.com/bxj'
re=requests.get(link,headers=headers)
soup=BeautifulSoup(re.content,'lxml')
soup_list=soup.find('ul',class_='for-list')

li_list=soup_list.find_all('li')
for lli in li_list:
    title=lli.find('div',class_='titlelink box')
    print('标    题:'+title.a.string)#重点:NavigableString对象获取文本内容的方法
    print('标题链接:'+"https://bbs.hupu.com"+title.a['href'])#重点:获取标签内链接的方法
    author=lli.find('div',class_='author box')
    print('作    者:'+author.a.string)
    print('发布时间:'+author.contents[5].string)
    reply_view=lli.find('span',class_='ansour box')
    reply_view=reply_view.text.strip().split('/')#重点:对形如23/34这样的字符串进行分割
    print('回    复:'+reply_view[0].strip())#strip()不可省略,否则会有空格
    print('浏    览:'+reply_view[1].strip())
    endreply=lli.find('div',class_='endreply box')
    print('最后回复时间:'+endreply.a.string)
    print('最后回复链接:'+"https://bbs.hupu.com/"+endreply.a['href'])
    print('最后回复人  :'+endreply.span.string)
    print()
    post.insert_one({'标题':title.a.string,'标题链接':"https://bbs.hupu.com"+title.a['href'],'作    者':author.a.string,'发布时间':author.contents[5].string,'回    复':reply_view[0].strip(),'浏    览':reply_view[1].strip(),'最后回复时间':endreply.a.string,'最后回复链接':"https://bbs.hupu.com/"+endreply.a['href'],'最后回复人':endreply.span.string})

这样我们就大功告成了,注意代码部分的注释是一些容易被忽视却很常用的重点。

比如:

print('标    题:'+title.a.string)#重点:NavigableString对象获取文本内容的方法

print('标题链接:'+"https://bbs.hupu.com"+title.a['href'])#重点:获取标签内链接的方法

reply_view=reply_view.text.strip().split('/')#重点:对形如23/34这样的字符串进行分割

现在我们来到数据库,查询一下我们的内容:

数据已经被正确的出入进去了。 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9号信箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值