网页新闻抓取(NikeSierrapython4.1单页面爬虫要找出每个文章块)
优采云 发布时间: 2021-12-26 19:06网页新闻抓取(NikeSierrapython4.1单页面爬虫要找出每个文章块)
0. 背景
近日,由于耐克的不断努力,Ins再次被各种联名刷屏。. .
突然,我的假鞋商有了一点想法。
那么第一步就是要找出最近新鞋在哪里卖,所以我们写一个scrapy爬虫来爬取每日运动鞋新闻。
1. 需求
1.1 爬取各种北美新闻网站(目前已添加hypebeast和sneakernews) PS hypebeast有中文站,但与美版新闻不同步。再三考虑。
1.2 实现自动化。毕竟不是自动的,和网上看有什么区别
1.3 筛选和清洁新闻。毕竟我这个假经销商,只关心最火最赚钱的。当然好看也很重要,但是写个CNN给鞋子打分还是太费时间了。. (其实也不是没有可能)
2. 环境
macOS 塞拉利昂
蟒蛇3.6
刮的
皮查姆
3. 准备
启动项目
scrapy startproject hypebeast_sneaker
用Pycharm打开项目,像这样:
这样我们就有了一个爬虫。
4. 正式写代码
4.1 单页爬虫
知道我们使用scrapy爬下所有页面是没有用的。我们只需要每篇文章的发布时间、页面浏览量、标题和文章网址。
我们要做的第一件事就是观察hypebeast的html。. .
右击页面“检查”
好在Chrome有鼠标跟随功能(查看窗口左上角的鼠标按钮,这辈子是它给的……)
我们正在寻找的信息在这个块中。
所以我们只需要在爬虫的解析中使用selector来查找每个文章块:
articals = selector.xpath('//div[@class="post-box-content-container"]')
您可以在 Internet 上找到有关如何使用 xpath 的特定教程。很多都写得很全面。
下一步我们需要处理每篇文章的信息。
我们用同样的方法找到文章块中各种信息的位置:
title_div = artical.xpath('div[@class="post-box-content-title"]')
artical_mata = artical.xpath('div[@class="post-box-content-meta"]')
title_text = title_div.xpath('a/@title').extract()[0]
artical_url = title_div.xpath('a/@href').extract()[0]
datetime = artical_mata.xpath('span[@class="time"]/time').extract()[0]
views = artical_mata.xpath('div[@class="post-box-stats"]/hype-count/span[@class="hype-count"]/text()').extract()[0]
接下来要做的就是输出爬取的数据,我们暂时用scarpy输出到本地的csv文件中。
打开items.py,将我们想要的数据写入Item Class中:
下一步是添加输出爬取的信息进行解析的代码:
item['url'] = artical_url
item['title'] = title_text
item['views'] = views
item['time'] = datetime
yield item
然后在设置中添加输出设置:
FEED_URI = u"/Users/stev/Desktop/news/test.csv"
FEED_FORMAT = 'CSV'
FEED_EXPORT_ENCODING = 'utf-8'
记得设置编码,不然会乱码。
好的,你可以运行它:
只爬了十次就停下了。. . . . . . . . . . . .
原来网页是动态加载的。. . . . . .
然后你需要模拟浏览器来找出请求。. . . . . . .
还好在我绝望的时候,我滑动了hypebeast的页面,查看了它的url:
https://hypebeast.com/footwear/page/2
那么你只需要使用多个网址爬虫的方法即可。
4.2多个网址爬虫
目前没有其他想法。. . 使用的方法是使用for循环抓取1-4页(每天的feed量大概是2-3页),同时比较昨天存储的最后抓取的url,到了就停止抓取。
这里我们需要yield和callback
由于需要多个网址爬虫,这里需要把前面写的解析方法分开。
并在原解析中写入,新代码:
for page_num in range(1,5,1):
crawling_url = url + str(page_num)
yield scrapy.Request(crawling_url, callback=self.parse_hype_pages)
需要注意的是,由于yield和return的机制不同,yield直接生成generator。
4.另外3个网站
多站点其实就是在判断不同的 URL 来回调不同的解析器
4.4 Sneakrnews
然后分析sneakernews网页制作新贴
PS运动鞋新闻在此页面上有一个购买最热门运动鞋的部分。但是这部分的更新频率太低了(