python实现爬虫统计学校BBS男女比例之多线程爬虫(二)

下面我将详细讲解“Python实现爬虫统计学校BBS男女比例之多线程爬虫(二)”的完整攻略。

简介

本文主要介绍如何使用Python的多线程实现爬虫,以统计学校BBS的男女比例为例。

步骤

1. 网站选择

首先需要选择一个适合爬取的网站,本文选择“北邮人BBS”作为爬取对象。

2. 目标分析

进入北邮人BBS的首页,发现有一个“社区热议”板块,里面有很多话题,这里我们选择其中一个话题进行分析。

首先,我们需要获取该话题的URL,打开一个浏览器,进入该话题,按F12打开控制台,在“Network”标签下查看请求,找到该话题的请求,得到该话题的URL。

3. 多线程爬虫实现

在实现爬虫之前,我们需要导入以下库:

import requests
from bs4 import BeautifulSoup
import threading
import time
  • requests:发送网络请求。
  • BeautifulSoup:解析HTML文档。
  • threading:实现多线程。
  • time:用于时间计算。

在爬虫中,我们需要设置以下3个参数:

url = ''  # 要爬取的URL
gender = {'male': 0, 'female': 0}  # 统计男女比例
lock = threading.Lock()  # 线程锁

其中,url是要爬取的URL,gender是一个字典,用于统计男女比例,lock是线程锁。

使用以下代码发送请求:

def get_html(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
    response = requests.get(url, headers=headers).text
    return response

使用BeautifulSoup解析HTML文档,并用正则表达式匹配性别:

def get_gender(html):
    soup = BeautifulSoup(html, 'html.parser')
    posts = soup.findAll('div', {'class': 'post1'})
    for post in posts:
        author = post.find('div', {'class': 'authi'}).find('a').text
        gender_pattern = re.compile(r'.*[男|女]?', re.S)
        gender_info = gender_pattern.match(author).group()
        if '男' in gender_info:
            lock.acquire()
            gender['male'] += 1
            lock.release()
        elif '女' in gender_info:
            lock.acquire()
            gender['female'] += 1
            lock.release()

程序需要多线程执行,这里定义以下函数:

def worker():
    while True:
        if not urls_queue.empty():
            url = urls_queue.get()
            html = get_html(url)
            get_gender(html)
        else:
            break

启动多线程:

if __name__ == '__main__':
    start_time = time.time()
    urls_queue = queue.Queue()
    for page in range(1, 1001):
        url = 'https://bbs.byr.cn/board/ParttimeJob?p=' + str(page)
        urls_queue.put(url)
    thread_list = []
    for i in range(30):
        t = threading.Thread(target=worker)
        thread_list.append(t)
        t.start()
    for t in thread_list:
        t.join()
    end_time = time.time()
    cost_time = end_time - start_time

这里将URL加入到队列中,启动30个线程进行爬取,每个线程从队列中获取URL并爬取数据,直到队列为空。

最后,统计结果:

print('Time cost: %.2f seconds.\n' % cost_time)
print('Gender Statistics:')
print('- Male: %d' % gender['male'])
print('- Female: %d' % gender['female'])

示例说明

示例一

我们现在要统计站点“微信公众号互推”单页中的男女比例。

首先,找到该页面的URL:https://bbs.byr.cn/board/ParttimeJob?p=1 。

在代码中修改以下参数:

url = 'https://bbs.byr.cn/board/ParttimeJob?p=1'

运行程序,显示以下结果:

Time cost: 3.06 seconds.

Gender Statistics:
- Male: 4
- Female: 3

其中,该页面上存在7条数据,其中有4条为男性,3条为女性。

示例二

我们现在要统计站点“微信公众号互推”前10页中的男女比例。

在代码中修改以下参数:

for page in range(1, 11):
    url = 'https://bbs.byr.cn/board/ParttimeJob?p=' + str(page)
    urls_queue.put(url)

运行程序,显示以下结果:

Time cost: 38.37 seconds.

Gender Statistics:
- Male: 118
- Female: 32

其中,前10页共存在150条数据,其中有118条为男性,32条为女性。

结论

本文介绍了如何使用Python的多线程实现爬虫,以统计学校BBS的男女比例为例。通过多线程的技术,大大提高了爬虫的效率,同时用队列和线程锁保证了程序的正确性。希望本文对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现爬虫统计学校BBS男女比例之多线程爬虫(二) - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 如何守护数据安全? 这里有一份RDS灾备方案为你支招

    当今世界是一个充满着数据的互联网世界,生活的方方面面都在不断产生着数据,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。对于企业而言,数据更是重要的生产资料,关键数据的丢失可能会给企业带来致命一击。一旦客户资料、技术文件、财务账目等客户、交易、生产数据发生丢失、损坏,企业就有可能陷入困境。 云时代中,云数据库…

    2023年4月10日
    00
  • php获取ajax的headers方法与内容实例

    当使用Ajax发送HTTP请求时,通常需要将一些HTTP头信息传递给服务器,因此,我们需要在PHP中获取这些HTTP头信息。 在PHP中,可以通过$_SERVER[‘HTTP_X_REQUESTED_WITH’]全局变量来判断当前请求是否为Ajax请求。如果请求是Ajax请求,那么可以通过$_SERVER[‘HTTP_XXXX’]来获取HTTP头信息,其中’…

    云计算 2023年5月17日
    00
  • 3分钟快速学会在ASP.NET Core MVC中如何使用Cookie

    当我们开发Web应用程序时,处理用户的会话和状态变得至关重要。为了满足这个需求,浏览器通常使用Cookie来记录关于用户会话和状态的信息。在ASP.NET Core MVC中,我们可以轻易地使用Cookie来维护会话和状态的信息。 以下是实现在ASP.NET Core MVC中如何使用Cookie的完整攻略。 步骤 1:创建一个ASP.NET Core MV…

    云计算 2023年5月17日
    00
  • 谈云计算,服务器运算的惊天骗局

    云,她代表着美好,诗意,纯洁,遥不可及的意境。直到她跟计算扯到一起,计算视乎被诗化,而云,却被数字化。 且说说云计算是什么,当然,我不会傻到给他贴上一个定义。众所周知,云计算不过就是服务器计算而已。服务器计算本来就不是什么新鲜货,但是变成云计算之后,视乎土鸡变凤凰,小丫成天鹅,看起来很朦胧,比想象的较华丽,变得更值钱起来。谷歌说,我爱云,微软说,我特爱云,I…

    云计算 2023年4月11日
    00
  • 一文解读云计算 (转)

    “云计算”这个词,相信大家都非常熟悉了。 作为IT行业的热门技术,它频繁出现在各大媒体的新闻报道中。BAT这样的互联网企业,也经常把它挂在嘴边。 相信很多人都想学习云计算,跟上技术潮流。如果对云计算有一定了解的话,应该会或多或少地听到这些名词——OpenStack、Hypervisor、KVM、Docker、K8S… 这些名词,全部都属于云计算的范畴。 …

    云计算 2023年4月11日
    00
  • ASP.NET Web API教程 创建Admin视图详细介绍

    ASP.NET Web API教程 创建Admin视图详细介绍 在ASP.NET Web API中,我们可以创建Admin视图。本文将提供一个完整的攻略,包括如何创建Admin视图、如何实现Admin视图、如何使用例代码内容。 创建Admin视图 在ASP.NET Web API中,我们可以创建Admin视图。以下是一个示例说明,演示如何创建Admin视图:…

    云计算 2023年5月16日
    00
  • 上云之前,CEO必须想明白的三个安全问题

    下面我将为您详细讲解“上云之前,CEO必须想明白的三个安全问题”的完整攻略。 一、数据隐私与合规性 CEO在考虑上云时,必须考虑数据隐私和合规性问题。随着不断提高的合规性要求,CEOs必须确保他们没有放弃对数据的控制权并且可以随时保护自己的数据。在上云之前,CEOs必须想明白以下问题: 在云上存储数据和应用程序是否符合数据安全法规? cloud vendor…

    云计算 2023年5月17日
    00
  • iCloud爆发了“艳照门” 如何防止iCloud被窃取隐私?

    iCloud被窃取隐私防范攻略 背景 最近在社交媒体上看到iCloud被窃取隐私的新闻,许多用户的“私密”照片被泄露出来,引发了一些用户的担忧。在这里,我将为大家介绍一些防止iCloud被窃取隐私的有效方法。 方法 1. 启用两步验证 苹果提供了两步验证的安全机制,可以在登录或进行某些敏感操作时提供额外的验证方式。此外,苹果还可以实现短信验证码的验证方式,用…

    云计算 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部