python bs4抓取百度贴吧

简介:

BeautifulSoup是python一种原生的解析文件的模块,区别于scrapy,scrapy是一种封装好的框架,只需要按结构进行填空,而BeautifulSoup就需要自己造轮子,相对scrapy麻烦一点但也更加灵活一些

以爬取百度贴吧内容示例说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# -*- coding:utf-8 -*-
__author__ = 'fengzhankui'
import  urllib2
from  bs4  import   BeautifulSoup
class  Item( object ):
     title = None
     firstAuthor = None
     firstTime = None
     reNum = None
     content = None
     lastAuthor = None
     lastTime = None
class  GetTiebaInfo( object ):
     def  __init__( self ,url):
         self .url = url
         self .pageSum = 5
         self .urls = self .getUrls( self .pageSum)
         self .items = self .spider( self .urls)
         self .pipelines( self .items)
     def  getUrls( self ,pageSum):
         urls = []
         pns = [ str (i * 50 for  in  range (pageSum)]
         ul = self .url.split( '=' )
         for  pn  in  pns:
             ul[ - 1 ] = pn
             url = '=' .join(ul)
             urls.append(url)
         return  urls
     def  spider( self ,urls):
         items = []
         for  url  in  urls:
             htmlContent = self .getResponseContent(url)
             soup = BeautifulSoup(htmlContent, 'lxml' )
             tagsli  =  soup.find_all( 'li' , class_ = [ 'j_thread_list' , 'clearfix' ])[ 2 :]
             for  tag  in  tagsli:
                 if  tag.find( 'div' ,attrs = { 'class' 'threadlist_abs threadlist_abs_onlyline ' }) = = None :
                     continue
                 item = Item()
                 item.title = tag.find( 'a' ,attrs = { 'class' : 'j_th_tit' }).get_text().strip()
                 item.firstAuthor = tag.find( 'span' ,attrs = { 'class' : 'frs-author-name-wrap' }).a.get_text().strip()
                 item.firstTime  =  tag.find( 'span' , attrs = { 'title' : u '创建时间' .encode( 'utf8' )}).get_text().strip()
                 item.reNum  =  tag.find( 'span' , attrs = { 'title' : u '回复' .encode( 'utf8' )}).get_text().strip()
                 item.content  =  tag.find( 'div' ,attrs = { 'class' 'threadlist_abs threadlist_abs_onlyline ' }).get_text().strip()
                 item.lastAuthor  =  tag.find( 'span' ,attrs = { 'class' 'tb_icon_author_rely j_replyer' }).a.get_text().strip()
                 item.lastTime  =  tag.find( 'span' , attrs = { 'title' : u '最后回复时间' .encode( 'utf8' )}).get_text().strip()
                 items.append(item)
         return  items
     def  pipelines( self ,items):
         with  open ( 'tieba.txt' , 'a' ) as fp:
             for  item  in  items:
                 fp.write( 'title:' + item.title.encode( 'utf8' ) + '\t' )
                 fp.write( 'firstAuthor:' + item.firstAuthor.encode( 'utf8' +  '\t' )
                 fp.write( 'reNum:' + item.reNum.encode( 'utf8' +  '\t' )
                 fp.write( 'content:'  +  item.content.encode( 'utf8' +  '\t' )
                 fp.write( 'lastAuthor:'  +  item.lastAuthor.encode( 'utf8' +  '\t' )
                 fp.write( 'lastTime:'  +  item.lastTime.encode( 'utf8' +  '\t' )
                 fp.write( '\n' )
     def  getResponseContent( self ,url):
         try :
             response = urllib2.urlopen(url.encode( 'utf8' ))
         except :
             print  'fail'
         else :
             return  response.read()
if  __name__ = = '__main__' :
     url = u 'http://tieba.baidu.com/f?kw=战狼2&ie=utf-8&pn=50'
     GetTiebaInfo(url)

代码说明:

这个例子是按照scrapy那样的结构,定义一个item类,然后抽取url中的html,再然后交给第三个方法进行处理,由于贴吧都有置顶的条目,因为匹配class类名默认都是按in处理的,不能and处理,所以不能精确匹配类名,在tag循环过滤的时候才会有过滤置顶内容的条件筛选










本文转自 无心低语 51CTO博客,原文链接:http://blog.51cto.com/fengzhankui/1946288,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
Python
"揭秘!Python如何运用神秘的正则表达式,轻松穿梭于网页迷宫,一键抓取隐藏链接?"
【8月更文挑战第21天】Python凭借其强大的编程能力,在数据抓取和网页解析领域表现出高效与灵活。通过结合requests库进行网页请求及正则表达式进行复杂文本模式匹配,可轻松提取网页信息。本示例展示如何使用Python和正则表达式解析网页链接。首先确保已安装requests库,可通过`pip install requests`安装。接着,利用requests获取网页内容,并使用正则表达式提取所有`<a>`标签的`href`属性。
48 0
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
2月前
|
数据采集 Python
python爬虫抓取91处理网
本人是个爬虫小萌新,看了网上教程学着做爬虫爬取91处理网www.91chuli.com,如果有什么问题请大佬们反馈,谢谢。
28 4
|
1月前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
83 1
|
2月前
|
数据采集 Java Python
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
在信息化时代,实时数据的获取对体育赛事爱好者、数据分析师和投注行业至关重要。本文介绍了如何使用Python的`ThreadPoolExecutor`结合代理IP和请求头设置,高效稳定地抓取五大足球联赛的实时比赛信息。通过多线程并发处理,解决了抓取效率低、请求限制等问题,提供了详细的代码示例和解析方法。
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
|
3月前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
3月前
|
数据采集 JavaScript 前端开发
构建简易Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字信息的时代,数据抓取成为获取网络资源的重要手段。本文将引导你通过Python编写一个简单的网页爬虫,从零基础到实现数据抓取的全过程。我们将一起探索如何利用Python的requests库进行网络请求,使用BeautifulSoup库解析HTML文档,并最终提取出有价值的数据。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开数据抓取的大门。
|
4月前
|
Python
告别死记硬背:掌握Python正则表达式re模块的高效应用&[面向百度编程]
Python中正则表达式的高效应用,通过内置的`re`模块,讲解了如何匹配、提取和替换字符串,并提供了相关示例代码,同时提倡通过实践来掌握正则表达式的使用,而不是仅仅依赖网络搜索。
50 1
|
4月前
|
数据采集 JavaScript 前端开发
构建你的第一个Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字时代,数据是新的石油。本文将引导初学者通过简单的步骤,使用Python编程语言创建一个基础的网络爬虫程序。我们将探索如何从网络上提取信息,并理解背后的原理。无论你是编程新手还是想要扩展你的技术工具箱,这篇文章都将为你提供一条清晰的道路,让你学会编写能够自动获取网络数据的脚本。准备好开始你的网络数据抓取之旅了吗?让我们现在就开始吧!
|
4月前
|
数据采集 JavaScript 前端开发
Python 爬虫实战:抓取和解析网页数据
【8月更文挑战第31天】本文将引导你通过Python编写一个简单的网络爬虫,从网页中抓取并解析数据。我们将使用requests库获取网页内容,然后利用BeautifulSoup进行解析。通过本教程,你不仅能够学习到如何自动化地从网站收集信息,还能理解数据处理的基本概念。无论你是编程新手还是希望扩展你的技术工具箱,这篇文章都将为你提供有价值的见解。