IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 山东大学软件工程应用与实践——ECommerceCrawlers代码分析(八) -> 正文阅读

[Python知识库]山东大学软件工程应用与实践——ECommerceCrawlers代码分析(八)

2021SC@SDUSC


目录

一、摘要

二、“souhu_new.py”文件核心代码分析

1.部分一

2.部分二

三、“run_main.py”文件核心代码分析?

1.部分一

2.部分二

四、总结


一、摘要

本篇博客作为“SohuNewCrawler”项目核心代码分析的第三篇。

我将接着上篇继续对“souhu_new.py”文件剩余核心代码以及“run_main.py”文件部分代码进行分析。

二、“souhu_new.py”文件核心代码分析

1.部分一

if url not in self.url_set:
   self.url_set.add(url)
   print(url)
   self.logMessage.put('【新闻】【{}】{}'.format(url_time,title))
   print('新增数据:', title)
   self.dburl.insert({"url": url, "time": url_time, "flag": 0, "title": title, "type": 
   type_name})

?对于之前创建的url_set来说,因为set是无重复的集合,里面存储的都是待爬取的新闻链接。

之前?url = parse.urljoin('http://m.sohu.com', per_new.get("url")) ,对于这些拼接出来的url,在self.url_set中判断,若url不在这个集合中,则添加进去,然后控制台输出该url。

将之前存储的新闻标题以及时间按照标准格式存储并存放在self.logMessage中,同时也将“新增数据”输出。

最后将上述得到的url,时间,标题,flag(标识状态),新闻类型一起通过self.dburl插入数据库中。

2.部分二

    def run(self,logMessage,errMessage):
        self.logMessage=logMessage
        self.errMessage=errMessage
        for base_url in new_url_list:
            for i in range(1, 130):
                if i==87:
                    continue
                new_url = '{base_url}{i}?size={size}'.format(base_url=base_url, i=str(i), 
                size=size)
                self.url_queue.put(new_url)

在run()函数中,在new_url_list中以url进行for循环。并且在内部有一整数for循环,i从1到130。new_url被赋值为'{base_url}{i}?size={size}'.format(base_url=base_url, i=str(i), size=size)。?

new_url的这个格式是对应不同的新闻接口。

例:"http://v2.sohu.com/integration-api/mix/region/84?size=100"

这其中的84?size=100即对应的是{i}?size={size},而前面的base_url即对应84前面的部分。

?

给new_url赋完值之后再将该new_url放入url队列self.url_queue中。

三、“run_main.py”文件核心代码分析?

“run_main.py”文件主要是针对网站主要部分进行爬取操作。

1.部分一

class NewsClawer():
    def __init__(self):
        self.dburl = MongoUrl()
        self.dbarticle = MongoArticle()
        self.url_set = set()

        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
            (KHTML, like Gecko) Chrome/69.0.3497.12 Safari/537.36"}

    def init_set(self):
        url_list = self.dburl.select({"flag": 1})
        for url in url_list:
            self.url_set.add(url.get('url'))

?在NewsClawer类中,_init_函数主要负责用来初始化相关值,对dburl,dbarticle进行初始化(值来自MongoDB数据库),创建一个set集合url_set。

将爬取时的headers中的“User-Agent”自定义。

自定义headers中的“User-Agent”的作用是为了处理一些简单的反爬操作。

User-Agent是一种请求头,服务器可以从User-Agent对应的值中来识别用户端使用的操作系统、浏览器、浏览器引擎、操作系统语言等等。
浏览器User-Agent通常由浏览器标识、渲染引擎标识、版本信息这三部分来构成。可以通过检查网页在这里查看User-Agent请求头值。

?在向服务器发送的网络请求中,User-Agent是客户端用于表明身份的一种标识。所以,反爬虫工程师可以将一些爬虫程序的请求头放入服务器访问的黑名单中,当有网络请求时通过检测User-Agent请求头域值来判断客户端的类型,将其与黑名单中数据进行比对,一致时则拒绝其访问,从而有效的限制一些爬虫程序。

url_list = self.dburl.select({"flag": 1})。

将数据库中存储的url进行条件查询,找出那些还未被爬取过的url并存进url_list中,而后将url_list中的url添加进url_set中。

2.部分二

    def req_news_command(self):
        while True:
            start_url_obj = self.dburl.find_one_update_flag1()

            if not start_url_obj:
                print('url已经全部扫描完毕')
                time.sleep(50)
                continue
            start_url = start_url_obj.get('url')
            news_time = start_url_obj.get('time', '')
            news_title = start_url_obj.get('title', '')
            news_type = start_url_obj.get('type', '')

            print('起始url', start_url,news_type,news_time,news_title)

?在req_news_command函数中。self.dburl调用find_one_update_flag1()函数。

? ? def find_one_update_flag1(self):
? ? ? ? return self.collection.find_one_and_update({"flag": 0}, {'$set': {"flag": 1}})

当url全部扫描完毕之后,将start_url_obj中的url,time,title,type均赋给start_url,news_time,news_title,news_type。最后将起始url输出。

四、总结

通过对“souhu_news.py”的分析,我对爬虫的主体过程有了一个比较清晰的了解,也收获了在爬虫与数据库应用之间的知识,收获颇丰。

我将在下一篇博客继续对“run_main.py”文件剩余核心代码进行分析,也将是本项目的最后一篇。?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:17:56  更:2021-11-23 12:19:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:52:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码