爬虫入门

爬虫入门

前言

觉得爬虫挺有意思,在家自己捣鼓捣鼓,今天写了一个炒鸡菜的爬虫,与其说是爬虫,其实就是个迭代器。。。主要是熟悉一下BeautifulSoup这个类。

正言

之前看到一个有意思的,说是在维基百科上,查找任意一个,一直循环点击第一个段落的第一个超链接,最后回到达哲学那个栏中,觉得挺有意思,这次写的也是这样。就是通过不断搜寻第一个段落的第一个超链接放到link_chain中,如果之后的超链接有和link_chain重复的,那就停止访问了,不然一直死循环了,BeautifulSoup这个类主要处理扒下来的html的,其实也还好理解。写了之后发现确实很多都循环了,但是其他的还真是很多就绕到了哲学那里,服气。。
直接贴py吧。

#coding=utf-8
import requests
import re
from bs4 import BeautifulSoup
import urllib
import time

start_url = 'https://en.wikipedia.org/wiki/2020_NASCAR_Cup_Series'
target_url = 'https://en.wikipedia.org/wiki/Philosophy'
def continue_crawl(search_history,target_url,max_steps=25):
    if(search_history[-1] == target_url):
        print("found target url! \n")
        print(target_url)
        return False
    elif(len(search_history) > max_steps):
        print("over length,done! \n")
        return  False
    elif(search_history[-1] in search_history[:-1]):
        print("already crawl it,done! \n")
        return False
    else:
        return True

def find_first_link(url):
    res = requests.get(url)
    html = res.text
    soup = BeautifulSoup(html,'html.parser')
    content_div = soup.find(id='mw-content-text').find(class_='mw-parser-output')
    first_link = None
    for element in content_div.find_all('p',recursive=False):
        if(element.find("a",recursive=False)):
            first_link = element.find("a",recursive=False).get('href')
            break

    if not first_link:
        return
    first_link = urllib.parse.urljoin('https://en.wikipedia.org/',first_link)
    return first_link

link_chain = [start_url]

while continue_crawl(link_chain,target_url):
    print(link_chain[-1])

    first_link = find_first_link(link_chain[-1])
    if not first_link:
        print("no link,done! \n")
        break
    link_chain.append(first_link)
    time.sleep(2)

有一点要注意就是最好直接在英文版的wikipediazh开头的维基可能html标签不太对劲,所以直接用前者测试就好。

还发现如果循环了的话,就一般是在
在这里插入图片描述
Language页面,而且基本上搜索啥迭代下去都会有Science,别说还真挺神奇。。既然是找哲学,最后上一个找到哲学成功的吧23333。
也是随机选的,在wikiCurrent events里挑的:
在这里插入图片描述

最后

有兴趣的小伙伴自己也可以试试, 我以后应该也会做一些高级的爬虫项目吧,慢慢来~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值