【有待理解和修改的代码】协程爬取学校网页

该代码示例展示了如何使用Python的requests库进行网络请求,结合lxml和BeautifulSoup解析HTML,利用gevent进行并发处理,从指定网页抓取用户信息、图片链接、内容、点赞数和评论数,并将数据保存到本地文件中。
摘要由CSDN通过智能技术生成

原参考代码

import requests
from queue import Queue
from lxml import etree
import gevent
import time

class Spider(object):
    def __init__(self):
        self.headers = {"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}
        self.base_url = "http://www.glutnn.cn/list.aspx?s=1&ClassID=110101&Curpage=1"
        # 创建保存数据的队列
        self.data_queue = Queue()
        # 统计数量
        self.count = 0

    def send_request(self, url):
        print("[INFO]: 正在抓取" + url)
        html = requests.get(url, headers=self.headers).content
        # 每次请求间隔1秒
        time.sleep(1)
        self.parse_page(html)

    def parse_page(self, html):
        html_obj = etree.HTML(html)
        node_list = html_obj.xpath('//div[contains(@id,"qiushi_tag")]')
        for node in node_list:
            # 用户名
            username = node.xpath('./div')[0].xpath(".//h2")[0].text
            # 图片链接
            image = node.xpath('.//div[@class="thumb"]//@src')
            # 取出标签下的内容:段子内容
            content = node.xpath('.//div[@class="content"]/span')[0].text
            # 点赞,取出标签里包含的内容
            zan = node.xpath('.//i')[0].text
            # 评论
            comments = node.xpath('.//i')[1].text
            items = {
                "username": username,
                "content": content,
                "image": image,
                "zan": zan,
                "comments": comments
            }
            self.count += 1
            self.data_queue.put(items)

    def start_work(self):
        job_list = []
        for page in range(1, 14):
            # 创建一个协程任务对象
            url = self.base_url + str(page) + "/"
            job = gevent.spawn(self.send_request, url)
            # 保存所有的协程任务
            job_list.append(job)
        # joinall()接收一个列表,将列表里的所有协程任务添加到任务队列里执行
        gevent.joinall(job_list)
        local_file = open("duanzi.txt", "wb+")
        while not self.data_queue.empty():
            content = self.data_queue.get()
            result = str(content).encode("utf-8")
            local_file.write(result + b'\n')
        local_file.close()
        print(self.count)

if __name__ == "__main__":
    spider = Spider()
    spider.start_work()

    # 性能分析
    # spider = Spider()
    # start = time.time()
    # spider.start_work()
    # print("[INFO]: Useing time %f secend" % (time.time() - start))


我的拼接的代码

import requests
from queue import Queue
from lxml import etree
import gevent
import time
from bs4 import BeautifulSoup


class Spider(object):
    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 '
                          'Safari/537.36 Edg/111.0.1661.62'}
        self.url = "http://www.glutnn.cn/list.aspx?s=1&ClassID=110101&Curpage=1"
        # 创建保存数据的队列
        self.data_queue = Queue()
        # 统计数量
        self.count = 0

    def send_request(self, url):
        print("[INFO]: 正在抓取" + url)
        html = requests.get(url, headers=self.headers).content
        # 每次请求间隔1秒
        time.sleep(1)
        self.parse_page(html)

    def parse_page(self, html):
        response = requests.get(url=self.url, headers=self.headers)
        response.encoding = 'utf-8'
        html = etree.HTML(response.text)
        # 保存网页→html文件
        open('work.html', 'w', encoding='utf-8').write(response.text)
        soup = BeautifulSoup(open('work.html', encoding='utf-8'), features='html.parser')
        # 获取所有 class_="td_list" 的 <td></td>
        for title in soup.find_all('td', class_="td_list"):
            # <td>标签下第一个<a>标签的文本的值
            print(title.a.text)

    def start_work(self):
        job_list = []
        for page in range(1, 14):
            # 创建一个协程任务对象
            url = self.url + str(page) + "/"
            job = gevent.spawn(self.send_request, url)
            # 保存所有的协程任务
            job_list.append(job)
        # joinall()接收一个列表,将列表里的所有协程任务添加到任务队列里执行
        gevent.joinall(job_list)
        local_file = open("duanzi.txt", "wb+")
        while not self.data_queue.empty():
            content = self.data_queue.get()
            result = str(content).encode("utf-8")
            local_file.write(result + b'\n')
        local_file.close()
        print(self.count)


if __name__ == "__main__":
    spider = Spider()
    spider.start_work()

    # 性能分析
    # spider = Spider()
    # start = time.time()
    # spider.start_work()
    # print("[INFO]: Useing time %f secend" % (time.time() - start))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
6:会员排行可按用户名,注册时间,发文数升降序排列。 7:全新留言板头像,留言可选定是否写给管理员看,并且加入留言审核功能。 8:新闻页快速评论功能,加入新闻阅读签收功能,新闻图片鼠标滚轮缩放功能,新闻标题后评论显示。 9:全新的单位部门设定。 10:增加图片新闻页面。 11:目录结构,文件命名,书写规则规范化。 12:统一了字符过滤代码。 13:栏目菜单分类功能加强。 14:整加页面过度效果设置。 15:附带全新忠网广告管理系统。 16:全新安全补丁。 17:前台用户和后台管理员实现分离,管理员需要再次登陆才能进入管理。 18:后台增加数据库备份压缩,数据恢复,系统空间占用功能,加入阿江ASP探针,附件管理,留言和评论实现独立管理,用户管理增加查找功能。增加其它一些实用小工具。 19:后台网站属性设置增加自定义Bottom菜单,是否开启注册用户签收功能。 20:初始化时可选择部份初始化,统计数据可以初始化。 21:全新的个人用户 博客 功能 22:全面支持RSS聚合新闻 XML 功能 23:全面修改总栏、大类、小类叶面,总栏、大类可分别设置不同模版 24:附件上传按后缀,时间分别建立目录 25:全面支持无大类、无小类文章,各级页面均支持模板 26:最新添加单位稿件统计(旧版本升级请后台运行Tools_UpdateDB-11-6.asp升级数据库) 27:其他错误修正 29:首页田字格小图片数量选择 29:后台1~3级菜单选择 30:系统设置不启用分级时打开新闻页空白补丁 31:新闻全部显示最新补丁 32:后台管理修正小BUG 33:忠网弹出广告修正 34:后台2处管理权限修正 35:上传漏洞补丁包, 远程非法提交,权限提升,SQL注入漏洞,完全补丁,以及其他小功能增强 36:远程非法提交,权限提升,SQL注入漏洞修正补修正,以及新闻上下篇功能及top透明广告条支持 37:添加无大小类文章BUG修正,其他小问题。top.asp自动换行(可选) 38:留言簿恶意广告攻击漏洞修正(IP过滤,留言验证码),后台文章检索,有情连接申请漏洞 . 39:增加了导航菜单的外部链接功能。 40: 整合了OA办公登录口,在首页可以直接登录。 41:整合邮局登录入口。 42:增加了视频点播功能,可以在后台设置是否显示视频点播。 客服QQ:38306293 客服QQ:417586492 客服QQ:657248708 客服QQ:290116505 客服QQ:314730679 客服QQ:394223545 客服QQ:469648611 客服QQ:454882888 客服MSN/E-mail:webmaster@wygk.cn 电话总机:020-34506590,020-34700400,020-34709708 传真:020-34709708 手机:13527894748,13719472523 演示:http://school.wygk.cn 下载:http://www.wygk.net.cn/dow/3school.rar 界面预览:http://www.wygk.net.cn/dow/3school.jpg 官方网址:http://www.wygk.net.cn http://www.wygk.cn http://www.gzxtx.cn http://www.fdkjgz.com 源码下载:http://cms.wrtx.cn 地址:广东省广州市天河区国家软件产业基地8栋 邮编:510000 Copyright 2009-2010 广州网软志成信息科技有限公司 Inc. All rights reserved
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值