2021SC@SDUSC
ECommerceCrawlers/TouTiao详解
一、代码概况
爬虫功能
在头条中搜索某个指定字段,并将搜索结果中所有的文章用csv格式存储。
代码位置
在项目中的位置:ECommerceCrawlers/TouTiao
gitee中的位置:https://gitee.com/AJay13/ECommerceCrawlers/tree/master/TouTiao
文件夹结构
├─TouTiao
│ ├─pictures
│ │ ├─JosephNest.jpg
│ │ └─mortaltiger.jpg
│ ├─README.md
│ └─toutiao.py
Toutiao:TouTiao爬虫的最上级目录名
pictures:图片目录,用于README.md引用,该目录下的两张图片是微信二维码
README.md:头条爬虫的说明文档
toutiao.py:爬虫代码(重点)
二、代码详解
导库
import requests
requests
库:是一个Python第三方库,是非常好用的http网络请求库
import time
time
库:Python自带的时间库
from selenium import webdriver
selenium
库:用于Web自动化测试
import csv
csv
库:顾名思义,用来操作csv的
import pandas as pd
pandas
库:基于Numpy的数据分析库,非常强大,爬虫中常用于存取数据和保存数据
from urllib.parse import quote
from urllib.parse import quote
:quote方法用于拼接url
from fake_useragent import UserAgent
from fake_useragent import UserAgent
:fake_useragent库用来伪装UA
评价与改进
这个作者的导库导的非常混乱,为什么这么说,首先,他同时调用了pandas
和csv
库,很显然,他想要将爬取的数据用csv存储,但他显然并不能熟练地使用这两个库。事实上,要想将数据写入csv,我们可以用pandas.DataFrame()获取一个DataFrame对象,再使用DataFrame对象的to_csv()
方法即可。他还同时调用了selenium
库和requests
库,这个操作我实在没有看懂。其次,最后,from urllib.parse import quote
完全可以用功能更全面的from urllib.parse import urlencode
替代。
爬虫代码分析
base_url 存储的是要爬取网站的基础网址,一般用于拼接
base_url = 'https://www.toutiao.com/api/search/content/'
时间戳,一般用于与url拼接,是url中的一个参数,乘1000的原因是:网页的请求一般是用JS发送的,而JS中的Date.now()是13位,而Python中的time.time()是10位
timestamp = int(time.time()*1000)
ua是fake_useragent.UserAgent()的实例化对象,一般用于伪造headers中的UA,常见写法是fake_useragent.UserAgent().random,verify_ssl=False表示忽略 SSL 验证
ua = UserAgent(verify_ssl=False)
初始化空列表article_url_list,用于存储文章链接
article_url_list = []
这行属实是没看懂要干啥
csv_name = pd.read_csv("typhoon_toutiao.csv")
下边10行代码是用来使用代理ip的,这类代码的具体写法得去看每个代理ip网站的使用文档,当你要用到代理ip的时候自然会知道的。
page_urls = ["http://dev.kdlapi.com/testproxy",
"https://dev.kdlapi.com/testproxy",]
tunnel_host = "tps189.kdlapi.com"
tunnel_port = "15818"
tid = "xxx"
password = "xxx"
proxies = {
"http": "http://%s:%s@%s:%s/" % (tid, password, tunnel_host, tunnel_port),
"https": "https://%s:%s@%s:%s/" % (tid, password, tunnel_host, tunnel_port)
}
初始化constract_list用于去重
constract_list = []
这周手上还接了两个项目,时间比较赶,就暂时分析到这吧。