当前位置: 首页 > 工具软件 > TouTiao > 使用案例 >

ECommerceCrawlers/TouTiao详解(代码分析篇一)

牧宁
2023-12-01

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

评价与改进

这个作者的导库导的非常混乱,为什么这么说,首先,他同时调用了pandascsv库,很显然,他想要将爬取的数据用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 = []

这周手上还接了两个项目,时间比较赶,就暂时分析到这吧。

 类似资料: