Python 爬虫获取某贴吧所有成员用户名

本文介绍了一个Python新手使用爬虫获取C语言贴吧所有成员用户名的过程,包括遇到的挑战、数据库优化以及性能测试。通过遍历页面并提取用户名,最终因百度限制导致爬虫失败,但学习到了宝贵的经验。
摘要由CSDN通过智能技术生成

最近想用Python爬虫搞搞百度贴吧的操作,所以我得把原来申请的小号找出来用。有一个小号我忘了具体ID,只记得其中几个字母以及某个加入的贴吧。所以今天就用爬虫来获取C语言贴吧的所有成员。

计划很简单,爬百度贴吧的会员页面,把结果存到MySQL数据库中,等到所有会员都爬完之后。我就可以使用简单的SQL语句查询账号名了。由于C语言贴吧会员有50多万,所以我还需要在合适的时候(例如插入数据库失败)把错误信息打印到日志文件中。由于我是Python新手,所以就不弄什么多线程得了,直接一个脚本用到黑。

看着很简单,实际也很简单。写完了我看了一下,用到的知识只有最基础的SQL操作、BeautifulSoup解析。

首先第一步就是看一下这个吧的信息页有多少页,关键代码如下。踩了两天坑,总算感觉对BeautifulSoup熟悉了一点。代码也很简单,按照class名查找到总页数这个标签,然后用正则表达式匹配到页数数字。这里要说一下,正则表达式的分组真好用。以前偷懒只学了一点正则表达式,发现没啥作用,只有配合分组才能比较精确的查找字符。

    html = request.urlopen(base_url).read().decode(encoding)
    soup = BeautifulSoup(html, 'lxml')
    page_span = soup.find('span', class_='tbui_total_page')
    p = re.compile(r'共(\d+)页')
    result = p.match(page_span.string)
    global total_pages
    total_pages = int(result.group(1))

    logger.info(f'会员共{total_pages}页')

有了总页数,我们就可以遍历页面了,代码如下。写的虽然比较脏,但是能用就行了,大家嫌难看就难看吧。这里做的事情就很简单了,从第一页开始遍历,一直遍历到最后一页。把每一页的用户名字提取出来,然后用_insert_table(connection, name)函数存到MySQL中。

因为我为了省事,直接把百度用户名当做主键了。但是保不齐贴吧有什么bug,导致用户名重复之类的问题,导致插入失败。所以我用try把保存这一块包起来。有异常的话就打印到日志中,方便排查。日志分成两种级别的,INFO级别输出到控制台,ERROR级别输出到文件。

def _find_all_users():
    global connection
    for i in range(start_page, total_pages + 1):
        target_url = f'{base_url}&pn={i}'
        logger.info(f'正在分析第{i}页')
        html = request.urlopen(target_url).read().decode(encoding)
        soup = BeautifulSoup(html, 'lxml')
        outer_div = soup.find('div', class_='forum_info_section member_wrap clearfix bawu-info')
        inner_spans = outer_div.find_all('span', class_='member')
        for inde
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值