点击“简说Python”,选择“星标公众号”
福利干货,第一时间送达!
@图片自制by小si
//
本文作者
王豪:行路难,多歧路,今安在,埋头苦改bug会有时,直到bug改完才吃饭。
//
阅读文本大概需要 9 分钟。
一、知识要求
二、爬取腾讯新闻实战
1.通过分析获取存放每个新闻链接的网址
2.创建数据库来存放爬取的新闻标题和链接
3.创建并编写一个爬取爬取腾讯新闻的scrapy项目
4.运行项目
一、知识要求
-
会抓包分析
二、爬取腾讯新闻实战
1.通过分析获取存放每个新闻链接的网址
(1)分析网页源代码中是否有新闻的链接:
通过分析,我们发现网页源代码中不含有新闻链接,但是,有很多js包,由此,我们自然的想到抓包分析。
(2)抓包分析:
①打开安装过代理的浏览器,我这里是火狐浏览器,然后进入到腾讯新闻首页
②打开抓包分析的工具
①打开安装过代理的浏览器,我这里是火狐浏览器,然后进入到腾讯新闻首页
②打开抓包分析的工具
Fiddler
,然后用clear命令清空列表。
如下:
③在火狐浏览器中刷新腾讯首页,Fiddler中会出现抓取一些数据包:
④通过看包分析,发现带有
/irs/rcd?cid
的js包含有新闻的链接和标题,所以我们的任务是要找到所有的这样的js包的网址:
④找出所有的这样的js包,复制其网址,找出规律:
发现第一个js包和第二个js包的网址没有规律,从第三个js包开始就有规律了,有这样的规律:
https://pacaio.match.qq.com/irs/rcd?cid=108&ext=&token=349ee24cdf9327a050ddad8c166bd3e3&page=6&callback=__jp9
其中page=6是第4个js包,jp9总是比前面的page=的值大3,所以,我们通过构造page的值和jp的值,就可以构造出js包的网址。
2.创建数据库来存放爬取的新闻标题和链接
这里,我创建了一个名为
tengxun
的数据库,并在该数据库中建立了一张名为
news
的表:
3.创建并编写一个爬取爬取腾讯新闻的scrapy项目
(1)创建
该爬虫项目和爬虫文件我就不多做说明了,如果不会可以
,我创建的项目如下:
(2)编写爬虫项目:
①item.py文件:
①item.py文件:
1# -*- coding: utf-8 -*-
2
3# Define here the models for your scraped items
4#
5# See documentation in:
6# https://doc.scrapy.org/en/latest/topics/items.html
7
8import scrapy
9
10
11class TengxunnewsItem(scrapy.Item):
12 # define the fields for your item here like:
13 # name = scrapy.Field()
14 title = scrapy.Field() # 设置标题容器
15 link = scrapy.Field() # 设置链接容器
②tx.py文件:
1# -*- coding: utf-8 -*-
2import scrapy
3from tengxunnews.items import *
4from scrapy.http import Request
5import re
6
7
8class TxSpider(scrapy.Spider):
9 name = 'tx'
10 allowed_domains = ['qq.com'] # 允许爬取的网址的域名
11 # 第一次爬取的网址,虽然写出是两行,实际是一行,只是很长换成两行了
12 start_urls = ['https://pacaio.match.qq.com/irs/rcd?cid=108&'
13 'ext=&token=349ee24cdf9327a050ddad8c166bd3e3&page=0&expIds=&callback=__jp1']
14 # 来存放所有的js包地址
15 allLink = ['https://pacaio.match.qq.com/irs/rcd?cid=108&ext=&token=349ee24cdf9327a050ddad8c166bd3e3&page=0&expIds=&callback=__jp1',
16 'https://pacaio.match.qq.com/irs/rcd?cid=4&token=9513f1a78a663e1d25b46a826f248c3c&ext=&page=0&expIds=&callback=__jp2']
17 # 后面再爬取7个js文件,总共爬取9个js文件
18 for i in range(0, 7):
19 # 构造每个js文件的地址
20 url = 'https://pacaio.match.qq.com/irs/rcd?cid=108&ext=&token=349ee24cdf9327a050ddad8c166bd3e3&page='+str(i+1)+'&callback=__jp'+str(i+4)
21 allLink.append(url) # j将构造的js包网址追加到allLink列表中
22
23 def parse(self, response):
24 # 爬取每个js包的数据
25 for link in self.allLink:
26 yield Request(link, callback=self.next)
27
28 def next(self, response):
29 # 获取每个js包内存放的新闻标题和新闻链接
30 item = TengxunnewsItem()
31 data = response.body.decode("utf-8", "ignore")
32 pat1 = '"title":"(.*?)"'
33 pat2 = '"surl":"(.*?)"'
34 item["title"] = re.compile(pat1).findall(data)
35 item["link"] = re.compile(pat2).findall(data)
36 yield item
③pipelines.py文件:
4.运行项目
(1)运行项目:
(2)到数据库中查看结果:
写数据库入成功!
!
!
(3)复制第一个一个网址,进入:
(3)复制第一个一个网址,进入:
与其标题相符合,确实就是该文章的链接。(4)至此,实战成功!!!
昨天最佳留言读者:Maverick,
请于2日内联系微信:jjxksa888,领取奖励。
厉害了我的国
今日留言主题:
说说你看了本文后的感触?
读了上面Maverick读者留言感触?
或者一句激励自己的话?
(字数不少于15字)
我会选出一名同学赠出下面书籍
《机器学习线性代数》
北京大学出版社赞助
《机器学习线性代数》:线性代数是机器学习的基石
扫码查看书籍详情
2小时快速掌握Python基础知识要点。
完整Python基础知识要点
学Python | 聊赚钱