基于python的脚本爬取:维基百科实战

爬虫已经逐渐成为非程序员都要学会的技能之一。而当前市面上的爬虫脚本冗杂,这里提供一个易于新手上手的脚本爬取,主要特点就是简单,快速上手看下面。 

使用场景:爬取维基百科内容

效果:给一个网页,返回一个chinese_txt文件,里面有爬回这个网页内所有的文字,以及网页内所有的链接内的网页文字也会被爬到。

快速上手

  1. pip install 上面所有的包
  2. full_url 内填入你要爬取的第一个网页
  3. 运行代码即可
  4. 你还可以:
    1. 调整 depth的判断语句(if depth < n) 来控制爬虫的深度。举个例子,我访问了一个维基百科,这是1层,这个维基百科里有很多链接链到别的网页,我如果从1层网页点了某个链接,就进入了2层。以此类推,你也可以控制爬虫爬取的深度。
    2. 调整你要爬取的内容。你可以使用F12开启开发者工具,并查看你要爬取的内容所在的模块,并在for p in soup.find_all('p') 中进行更改
    3. 如果你有chatgpt或类似生成式AI,你可以结合AI进行代码解读,或让他给你进一步优化。
import requests
import re
import time
from bs4 import BeautifulSoup

exist_url = []
g_writecount = 0

full_url = "" # 填写你要爬取的网页
def scrappy(url, depth=1):
    global g_writecount
    try:
        headers = {
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}
        r = requests.get(full_url, headers=headers)
        html = r.text
    except Exception as e:
        print("Failed downloading and saving ", full_url)
        print(e)
        exist_url.append(full_url)
        return None

    exist_url.append(url)

    # 使用BeautifulSoup提取页面的所有文本内容
    soup = BeautifulSoup(html, 'lxml')

    # 提取所有文本
    chinese_text = ''.join([p.get_text() for p in soup.find_all('p')])

    # 保存中文文本到文件
    with open('chinese_txt.txt', 'a+', encoding='utf-8') as f:
        f.write(chinese_text)

    link_list = re.findall('<a href="/wiki/([^:#=<>]*?)".*?</a>', html)
    unique_list = list(set(link_list) - set(exist_url))

    for eachone in unique_list:
        g_writecount += 1
        output = 'No.' + str(g_writecount) + '\t Depth:' + str(depth) + '\t' + full_url + ' -> ' + eachone + '\n'
        print(output)

        if depth < 2:
            time.sleep(5)  # 添加5秒的延迟
            scrappy(eachone, depth + 1)


start = time.time()

scrappy(url)
stop = time.time()
print("所用时间:", stop - start)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值