python爬虫多少行代码,python爬虫——30行代码爬取论坛数据

写在前面:

最近自学了一下python爬虫,用来简单爬取论坛的数据,只学到了一些皮毛,毕竟还是要以实用为主嘛…学会了下面的代码,就可以爬取一些网站的数据了,这里我使用xpath库进行爬取,问我为什么不用正则?因为我还不是很会用,哈哈。

1.环境准备

1.pycharm开发工具

2.python3.8

3.xpath helper

4.有手就行

2.分析需要爬取的网站

http://hongdou.gxnews.com.cn/viewforum-21.html

545d47dbd9831db0b12008ffbaf00abf.png

通过观察可以发现,我们想要数据都在【div class=“threadbit1”】里面

1555803b29bf32c498954e8c6ff66220.png

第一页是【http://hongdou.gxnews.com.cn/viewforum-21-1.html】

第二页是【http://hongdou.gxnews.com.cn/viewforum-21-2.html】

最后一页是【http://hongdou.gxnews.com.cn/viewforum-21-73.html】

从中我们可以找到翻页的规律,就是+1

3.获取URL和请求头

a039713cabd934c702fa3209344907ef.png

d2d9a0e0d3480d165cc8549d1151ec43.png

4.编写代码

import requests

import time

from lxml import etree

#url

url='http://hongdou.gxnews.com.cn/viewforum-21-%d.html'

#请求头

headers={

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'

}

if __name__ == '__main__':

#写入

fp = open('./hongdou.csv','w',encoding='utf-8')

#获取多页数据

for i in range(74):

s_url=url%(i+1)

res = requests.get(s_url,headers=headers) #发起请求

res.encoding='gbk' #设置编码格式

text = res.text

html = etree.HTML(text)

items = html.xpath('//div[@class="threadbit1"]')

# print(res.status_code)

for item in items:

title=item.xpath('.//div[@class="thread-row openTitle"]/a/font/text()'),

yeshu=item.xpath('.//span[@class="threadpages"]/text()'),

author=item.xpath('.//div[@style="float:right;width:80px;line-height:16px;"]/a[1]/text()'),

fa_time = item.xpath('.//div[@style="float:right;width:80px;line-height:16px;"]/a[2]/text()'),

lend_author=item.xpath('.//div[@style="float:right;width:100px;line-height:16px;"]/a[1]/text()'),

lend_time = item.xpath('.//div[@style="float:right;width:100px;line-height:16px;"]/a[2]/text()');

# print(title,yeshu,author,fa_time,lend_author,lend_time)

fp.write('%s\t%s\t%s\t%s\t%s\t%s\n'%(title,yeshu,author,fa_time,lend_author,lend_time))

print('第%d页爬取成功'%(i+1))

time.sleep(1)

fp.close()

5.代码解释

在获取的url地址中使用%d占位符,为后面爬取多页数据做准备。

print(res.status_code) 前期可以打印一下状态码,看请求成不成功。

time.sleep(1),一秒钟爬取一次,保守起见,不要给别人服务器造成太大压力,如果一直频繁请求你可能会被拉入黑名单。

我发现这个网页的编码格式是GBK,但是大部分的网站编码格式都是utf-8

fp = open('./hongdou.csv','w',encoding='utf-8') 想要保存成txt格式都可以咯,为什么这里编码是utf-8,这是反复测试的结果,不然保存会乱码,就是那么奇怪。

s_url=url%(i+1)如果像是翻一页+20,括号里也可以写成(i*20),但是range里面就需要相应的改变了,比如 2X20=40,3X20=60…

6.xpath

使用xpath helper帮助我们更加精准的获取到想要的数据。当然,代码不是唯一的,你怎么开心怎么来,写着写着发现变黄了就说明你找到了,运行一下代码看找到想要的数据就得了呗。

4701322dfc8bcf09efad5c82c66242fe.png

以获取标题为例:

title=item.xpath('.//div[@class="thread-row openTitle"]/a/font/text()'),

前面加个点代表当前路径下,后面加个/text(),不加就获取不到。如果增加下面的.strip()去除两边空格的方法,我有时候会报错,所以我干脆就不用了

title=item.xpath('.//div[@class="thread-row openTitle"]/a/font/text()')[0].strip(),

获取完了可以打印一下看对不对:

print(title);

7.xpath helper

要在谷歌浏览器里用,别的浏览器我没用过。

安装包在这:https://pan.baidu.com/s/1vAz-wIdsJ5EaX1hp37St4g提取码【8a2h】

解压安装包——浏览器中打开右上角三个点——选择更多工具——扩展程序——加载已解压的扩展程序

430a71355a3837c29042cf80761d87ee.png

0a7b0989181669f8534f14740e3d3344.png

重启一下浏览器,发现右上角多了个X标就得了;在网页中按快捷键Ctrl+Shift+X就可以打开使用了

07c0d745adbf42bbf020230f6420e1e3.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值