• 大小: 800B
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: Python
  • 标签: python  spider  

资源简介

开发爬虫中,始终受困于爬虫的效率问题,后多方查看资料,根据已掌握的信息编写了该项目,此demo完全基于python的协程思想实现,不管是自己研究用还是应用到自己的项目中都可以。需要的小伙伴快下载来使用吧

资源截图

代码片段和文件信息

from bs4 import BeautifulSoup
import requests
from urllib.parse import urlparse

start_url = ‘https://www.cnblogs.com‘
trust_host = ‘www.cnblogs.com‘
ignore_path = []
history_urls = []


def parse_html(html):
    soup = BeautifulSoup(html “lxml“)
    print(soup.title)
    links = soup.find_all(‘a‘ href=True)
    return (a[‘href‘] for a in links if a[‘href‘])


def parse_url(url):
    url = url.strip()

    if url.find(‘#‘) >= 0:
        url = url.split(‘#‘)[0]
    if not url:
        return None
    if url.find(‘javascript:‘) >= 0:
        return None

    for f in ignore_path:
        if f in url:
            return None
    if url.find(‘http‘) < 0:
        url = start_url + url
        return url
    parse = urlparse(url)
    if parse.hostname == trust_host:
        return url


def consumer():
    html = ‘‘
    while True:
        url = yield html

        if url:
            print(‘[CONSUMER] Consuming %s...‘ % url)
            rsp = requests.get(url)
            html = rsp.content


def produce(c):
    next(c)
    def do_work(urls):
        for u in urls:
            if u not in history_urls:
                history_urls.append(u)
                print(‘[PRODUCER] Producing %s...‘ % u)
                html = c.send(u)
                results = parse_html(html)
                work_urls = (x for x in map(parse_url results) if x)
                do_work(work_urls)
    do_work([start_url])
    c.close()

if __name__ == ‘__main__‘:
    c = consumer()
    produce(c)
    print(len(history_urls))

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1588  2019-10-21 14:10  python_spider.py

评论

共有 条评论