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这个贴吧首页的帖子列表,我们希望能抓取出所有的帖子标题,通过标题来判断用户是否有需求和付费的想法。
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)
request.get
可以把get的参数通过数组传入!这段代码就获取了贴吧的首页,这里的page变量是为了将来获取其他分页的内容,预留的变量!
003
xpath不多讲了。接下来,重点就是分析首页html的结构,咱们打开chorme [开发者工具], 找到 帖子标题对应的css代码。然后用xpath方法获取这些帖子。看下面两个图,来理解这个过程:
AB5A9754-6CE7-44EF-9199-D29956832FFA.png
5934D6B4-9E8B-4799-AB2A-CE82A6946778.png
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)
请注意,最关键就是列表 + 帖子标题提取的两个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])
微信公号
API1024微信
网友评论