30分钟!用python的request模块抓取百度贴吧内容

30分钟!用python的request模块抓取百度贴吧内容

python爬虫

001

我想通过自动抓取百度贴吧 “python爬虫吧“ 里的帖子数据,找到那些付费写爬虫的帖子,赚点零花钱!为了尝试新鲜的技术,我用到了python里的request模块,因为这个模块把http请求编写简化了。而具体的html内容分析我还是用xpath技术。百度:request手册百度:xpath

002

分析下百度贴吧的url地址:“https://tieba.baidu.com/f?ie=utf-8&kw=python%E7%88%AC%E8%99%AB&fr=search”,其中中间的kw字段就是本次要爬区的贴吧名字 “python爬虫吧"。先用request.get方法来get这个贴吧首页的帖子列表,我们希望能抓取出所有的帖子标题,通过标题来判断用户是否有需求和付费的想法。

[code]

import requests

page=1 #第一页 data = {"id":"utf-8", "kw":"python爬虫", "pn":page}

r = requests.get(’https://tieba.baidu.com/f’, params=data) #大家看到没,get可以把params参数传入print(r.text)

[code]

request.get可以把get的参数通过数组传入!这段代码就获取了贴吧的首页,这里的page变量是为了将来获取其他分页的内容,预留的变量!

003

xpath不多讲了。接下来,重点就是分析首页html的结构,咱们打开chorme [开发者工具], 找到 帖子标题对应的css代码。然后用xpath方法获取这些帖子。看下面两个图,来理解这个过程:

30分钟!用python的request模块抓取百度贴吧内容

AB5A9754-6CE7-44EF-9199-D29956832FFA.png

30分钟!用python的request模块抓取百度贴吧内容

5934D6B4-9E8B-4799-AB2A-CE82A6946778.png

[code]

import requests

from lxml import etree page=1 #第一页data = {"id":"utf-8", "kw":"python爬虫", "pn":page}

r = requests.get(’https://tieba.baidu.com/f’, params=data) #大家看到没,get可以把params参数传入# print(r.text)root = etree.HTML(r.text)

result = root.xpath("//ul[@class=’threadlist_bright j_threadlist_bright’]/li") #找到列表print(len(result))for i in range(len(result)):

title = (result[i].xpath(".//div[@class=’threadlist_title pull_left j_th_tit ’]/a/text()")) #找到标题

print(title)

[code]

请注意,最关键就是列表 + 帖子标题提取的两个xpath,这个需要对照chorme自己去调试才能写出来。初步成功,爬取标题的列表如下:

48[]

[’新手求助关于asyncio库的问题’]

[’python 2.7环境下爬图,初学者请多指教’]

[’江湖救急,来个大佬,如何用python监控手机的推送通知,可py交易’]

[’爬取中国裁判书文网遇到问题,求大神指点迷津’]

[’源码分享,爬取甜美妹子图妹子,就怕你硬盘不够大’]

[’求问这个*今条头日**的网址为什么不能获取完整代码’]

[’Python爬虫该怎么学习?学习步骤是什么? Python爬虫该怎么学习’]

[’无偿写爬虫,将你们的需求留下来,我来写’]

[’爬取图片保存之后只有一张图是怎么回事啊’]

[’分享慕课网七月老师的Python3入门+进阶课程视频’]

[’如何入门 Python 爬虫?’]

[’scrapy 创建出现10060错误’]

[’那个大神指导这个错误是啥意思,我爬网站里所有的的图片,我一个’]

[’Python基础问题答疑帖’]

[’云计算与大数据路过,Python不会但是感兴趣有人带吗?’]

[’Python各种安装包,需要什么安装包可以在下方留言’]

[’有没有靠谱点的python微信学习交流群’]

[’跪求最新工商注册的新公司的数据源’]

[’scrapy框架使用默认的文件管道*载下**视频有问题’]

[’Python源码分享’]

[’那个网站的动态ip 比较好’]

[’Python小白学习笔记,有需要的看过来哦,大家一起交流一起’]

[’为什么我用scrapy爬豆瓣电影250只能爬到200条?’]

[’有接项目的吗?’]

[’哪个大神帮我想想办法。怎么把range里面的 url的结果全’]

[’爬了BOOS直聘和拉钩网的有关于python爬虫的岗位信息’]

[’请问Python有什么好的书可以推荐’]

[’这个怎么解决,导入json 一直是灰色的,代码也运行不了’]

[’想练习爬虫,有推荐爬虫项目的吗’]

[’求助根据地址百度API批量爬取经纬度’]

[’Python爬取新浪微博【技术贴】’]

[’武汉python爬虫招聘’]

[’Python爬虫相关问题答疑帖’]

[’【求助】python爬虫的时候xpath获取网页内容出问题’]

[’做python爬虫的老哥们,爬虫经常加班吗?’]

[’爬取游民星空出现了一个尴尬的问题’]

[’高级爬虫’]

[’有工作过的前辈能指教一下吗’]

[’我学习了网络爬虫相关的技术,自己也做过一些爬虫程序,请问有项’]

[’输入pip install pyopenssl 和pip i’]

[’〈td〉爬取问题’]

[’请教大佬们一个问题,爬虫可以实现抓取某个APP上所有的域名吗’]

[’有谁知道怎么获取抖音的as cp mas字段吗’]

[’启动不了qt5,怎么办,昨天还好好的呢’]

[’求大神帮解决,选项点不了,也运行不了’]

[’谁手上有爬贴吧里面帖子标题的码子,求一套热乎的’]

[’求帮助,cmd里看包应该是安装成功了可软件报错’]

效果不错哦!

004

最后,解决分页问题,其实上面已经讲过了,page就是预留的分页参数,这里会把爬首页的代码抽成一个函数,然后再按page提取,直接放出最终的代码:

```

import requests

from lxml import etree

def tieba_req(page):

data = {"id":"utf-8", "kw":"python爬虫", "pn":page}

r = requests.get(’https://tieba.baidu.com/f’, params=data)

# print(r.text)

root = etree.HTML(r.text)

result = root.xpath("//ul[@class=’threadlist_bright j_threadlist_bright’]/li")

print(len(result))

for i in range(len(result)):

title = (result[i].xpath(".//div[@class=’threadlist_title pull_left j_th_tit ’]/a/text()"))

print(title)

content = (result[i].xpath(".//div[@class=’threadlist_abs threadlist_abs_onlyline ’]/text()"))

if len(content) > 0:

content = content[0]

else:

content = ""

content = trim(content)

# print(content)

for i in range(10): #来,给爷爬10页的

tieba_req(i*50)

def trim(str):

if(str==’’):

return str

elif (str[0]!=’ ’)and(str[-1]!=’ ’):

return str

elif str[0]==’ ’:

return trim(str[1:])

else :

return trim(str[0:-1])

```

俺微信公号