腾讯新闻爬取

任务目标:获取腾讯新闻首页
(https://news.qq.com/)热点精选部分至少50条新闻的id,标题和url.

1. 采用Selenium抓取数据

使用Selenium模拟鼠标的动作, 完成页面剩余部分的加载. 这里通过对页面打开时的请求进行分析, 找到了请求新闻数据的接口

# 使页面向下滑动,以便获取足够多的数据

time.sleep(5)

# 向下滚动1000像素
js = "window.scrollBy(0, 1000)"
# 滚动到当前页面底部,这两个试过,没有用
# js = "window.scrollTo(0,document.body.scrollHeight)" 
# js = "document.documentElement.scrollTop=500000"
for i in range(10):
    driver.execute_script(js)
    time.sleep(3)
    
html = driver.page_source
tree = etree.HTML(html)
# 试过用//li[@class="item cf"]/a[@class="picture"]/@href以及
# //li[@class="item cf"]/a[@class="picture"]/img/@alt
# 效果不好,获取到的数据长度不一致
lis = tree.xpath('//li[@class="item cf"]/div[@class="detail"]/h3/a')
link = tree.xpath('//li[@class="item cf"]/div[@class="detail"]/h3/a/@href')
title = tree.xpath('//li[@class="item cf"]/div[@class="detail"]/h3/a/text()')
print(len(lis))
print(len(link))
print(len(title))
# 这三个长度一致的时候再进行下一步


# 输出结果
for i in range(len(lis)):
    print(title[i], link[i])
# 写入文件
import csv

# windows下如果不加newline=''会有空行
# 如果不加encoding用vscode打开会乱码,如果是encoding='utf-8'用excel打开会乱码,只有用encoding='utf-8-sig'两者打开都不会乱码
with open('test.csv','w',newline='',encoding='utf-8-sig')as f:
    f_csv = csv.writer(f)
    f_csv.writerow(['index', 'title', 'url'])
    # 或者用f_csv.writerows([[数据1], [数据2], ...])一次性写入
    for i in range(len(lis)):
        f_csv.writerow([i+1, title[i], link[i]])

2. 获取动态加载地址并发起请求

  • Ajax动态加载

  • 找到动态加载页面url

  • page参数需放入到url中,否则只能获取到第一页数据

  • 结果保存到DataFrame中,并写入到csv文件

  • 列名包括:‘标题’,‘父类别’, ‘子类别’,‘标签’, ‘文章来源’, ‘显示类型’, ‘更新时间’,‘链接’

import requests
import time
import pandas as pd
import numpy as np
pre_url = 'https://pacaio.match.qq.com/irs/rcd?page='
headers = {
    'user-agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
}

info_list = []
for i in range(10):
    try:
        url = pre_url + str(i)
        page = str(i)
        params = {
            'cid': '137',
            'token': 'd0f13d594edfc180f5bf6b845456f3ea',
            'id': '',
            'ext': 'top',
            'expIds': '',
            # 'callback': '__jp1'
        }
        res = requests.get(url=url, headers=headers, params=params).json()
        for info in res['data']:
            result = {}
            result['标题'] = info['title']
            result['链接'] = info['vurl']
            result['父类别'] = info['category1_chn']
            result['子类别'] = info['category2_chn']
#             result['关键字'] = info['keywords']
            result['显示类型'] = info['showtype']
            result['文章来源'] = info['source']
            result['标签'] = info['tags']
            result['更新时间'] = info['update_time']
            info_list.append(result)
        time.sleep(2)
    except:
        print(i)
df = pd.DataFrame(info_list,columns=['标题','父类别', '子类别','标签', '文章来源', '显示类型', '更新时间','链接'])
df.index = np.arange(1,len(df)+1)
df.to_csv('QQ_news.csv')
print('数据采集完成')

3. 知乎数据爬取

还没做完哦
链接如下
https://www.zhihu.com/search?q=Datawhale&utm_content=search_history&type=content
用requests库实现,不能用selenium网页自动化

提示:
该链接需要登录,可通过github等,搜索知乎登录的代码实现,并理解其中的逻辑,此任务允许复制粘贴代码
与上面ajax加载类似,这次的ajax加载需要用requests完成爬取,最终存储样式随意,但是通过Chrome的开发者工具,分析出ajax的流程需要写出来

Scrapy是一个强大的Python网络爬虫框架,它可以帮助开发者高效地抓取网站数据,包括腾讯新闻。要使用Scrapy爬取腾讯新闻,可以按照以下步骤操作: 1. **安装Scrapy**: 首先确保你已经安装了Python,然后通过pip安装Scrapy: ``` pip install scrapy ``` 2. **创建项目**: 使用命令行进入你想放置项目的目录,然后运行: ``` scrapy startproject qidian_spider ``` 这会创建一个新的Scrapy项目。 3. **定义爬虫**: 在`qidian_spider/spiders`文件夹下创建一个新的Python文件,比如`tencent_news.py`。定义一个继承自`CrawlerSpider`的类,设置起始URL和解析规则: ```python import scrapy class TencentNewsSpider(scrapy.Spider): name = "tencent_news" start_urls = ['https://news.qq.com/'] def parse(self, response): # 解析新闻列表 news_list = response.css('div.news-item') # 根据腾讯新闻页面结构选择CSS选择器 for item in news_list: title = item.css('h2 a::text').get() # 提取标题 link = item.css('h2 a::attr(href)').get() # 提取链接 yield { 'title': title, 'link': link, } # 爬取下一页,如果存在分页 next_page = response.css('a.next::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 4. **配置settings.py**: 在项目根目录的`settings.py`文件里,添加Scrapy使用的下载器中间件和User-Agent等配置: ```python DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, } USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' ``` 5. **运行爬虫**: 最后,在命令行中运行爬虫: ``` scrapy crawl tencent_news ``` Scrapy将开始爬取并保存结果到指定的输出文件夹(默认为`items`)。 注意:实际抓取时需要遵守网站的Robots协议,并确保不会对目标服务器造成过大的负担。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值