文章目录
====================================================================
本文介绍的是使用requests库+正则+Beautiful爬取今日头条图集,下载图片并将相关数据保存到mongoDB中。博主在学习崔庆才的爬虫教学视频,学到15课时时,由于头条进行了更新,部分代码已经失效了,自己捣鼓了大半天,终于成功爬取了。在学习时,发现有很多新手对代码不是很理解,所以打算把这部分内容写出来,加上详细的注释,分享给大家。
项目预览
思路:
- 我们先爬取索引界面,获得进入详情页面的url
- 依次访问详情页面,并解析页面内容
- 保存信息和下载图片
- 当索引页面的所有图集都爬完了,我们要想着翻页,继续爬取
项目目录(爬取后)
MongoDB
控制栏
输出None表示该文章类型不是我们要获取的
1. 库的引入
在爬取今日头条时,所需要的全部库,请确保所有库都成功安装
首先打开编辑器,创建一个spider_toutiao.py文件,将下列引用写入到文件中
import requests
from urllib.parse import urlencode
from requests import RequestException
import json
from bs4 import BeautifulSoup
import re
import pymongo
from config import * # 这个自己定义的一个配置文件,下面会讲
from hashlib import md5
from multiprocessing import Pool
2. 爬取索引页面
2.1 页面分析
打开进入头条,在搜索栏输入街拍,显示如下,我们这里要爬取图片类型的文章,该类型文章具体特征已用红圈标出来了。在这一步,我们暂时不对文章类型做判断。
下面按F12,点击netword,经过搜索我们发现,本界面的数据是通过ajax来获取的,返回数据类型是json格式,所以我们要通过requests抓取返回的json格式数据。下图中横线画出来的是ajax访问的url,红圈标出的data就是我们要获取的数据,点开后里面有我们要获取的url
接下来点击headrs,很闲画出的部分就是我们要访问的url。然后往下翻,找到请求参数,这写参数是我们后面要传入到url中的
注意这cookie和浏览器信息,下面代码中要用到
2.2爬取索引界面的代码
#该函数用来分析索引解码,获取进入详情页的url。
#我们要传入一个offset(页数)和keyword(搜索的关键字)
def get_page_index(offset, keyword):
#data中的内容就是我们上图中访问参数,可以直接复制下来,把最后的timestamp参数删掉
data = {
'aid': '24',
'app_name': 'web_search',
'offset': offset, #注意这要换成我们传入的参数
'format': 'json',
'keyword': keyword, #注意这要换成我们传入的参数
'autoload': 'true',
'count': '20',
'en_qc': '1',
'cur_tab': '1',
'from': 'search_tab',
'pd': 'synthesis'
}
#构造访问的url
url = 'https://