文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用python实现垂直爬虫系统

2023-06-29 09:17

关注

小编给大家分享一下如何使用python实现垂直爬虫系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

html_downloader

from urllib import requestdef download(url):    if url is None:        return    response = request.urlopen(url)    if response.getcode() != 200:        return None    return response.read()

html_outeputer

data_list = []def collect_data(data):    data_list.append(data)def output_html():    fout = open('output.html', 'w')    fout.write('<html>')    fout.write('<body>')    fout.write('<table>')    for dataitem in data_list:        fout.write('<tr>')        fout.write('<td>%s</td>' % dataitem['url'])        fout.write('<td>%s</td>' % dataitem['title'])        fout.write('<td>%s</td>' % dataitem['datetime'])        fout.write('<td>%s</td>' % dataitem['visitcount'])        fout.write('</tr>')    fout.write('</table>')    fout.write('</body>')    fout.write('</html>')    fout.close()

html_parser

import refrom bs4 import BeautifulSoupfrom urllib.parse import urljoindef get_new_urls(page_url, soup):    new_urls = set()    links = soup.find_all('a', href=re.compile(r"/\d+/\d+/\w+/page\.htm"))    for link in links:        new_url = link['href']        new_full_url = urljoin(page_url, new_url)        new_urls.add(new_full_url)    return new_urlsdef get_new_data(page_url, soup):    res_data = {}    title_node = soup.find('h2', class_='arti-title')    if title_node is None:        return res_data    res_data['title'] = title_node.get_text()    datetime_node = soup.find('span', class_='arti-update')    res_data['datetime'] = datetime_node.get_text()    visitcount_node = soup.find('span', class_='WP_VisitCount')    res_data['visitcount'] = visitcount_node.get_text()    res_data['url'] = page_url    return res_datadef parse(page_url, html_cont):    if page_url is None or html_cont is None:        return    soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='utf-8')    new_urls = get_new_urls(page_url, soup)    new_data = get_new_data(page_url, soup)    return new_urls, new_data

spider_main

import urls_manager, html_downloader, \    html_parser, html_outputerdef craw(root_url):    count = 1    urls_manager.add_new_url(root_url)    #启动爬虫循环    while urls_manager.has_new_url():        new_url = urls_manager.get_new_url()        print('craw %d : %s' % (count, new_url))        html_cont = html_downloader.download(new_url)        new_urls, new_data = html_parser.parse(new_url, html_cont)        urls_manager.add_new_urls(new_urls)        if new_data:            html_outputer.collect_data(new_data)        if count == 10:            break        count = count + 1    html_outputer.output_html()if __name__ == '__main__':    root_url = 'http://news.zzuli.edu.cn/'    craw(root_url)import urls_manager, html_downloader, \    html_parser, html_outputerdef craw(root_url):    count = 1    urls_manager.add_new_url(root_url)    #启动爬虫循环    while urls_manager.has_new_url():        new_url = urls_manager.get_new_url()        print('craw %d : %s' % (count, new_url))        html_cont = html_downloader.download(new_url)        new_urls, new_data = html_parser.parse(new_url, html_cont)        urls_manager.add_new_urls(new_urls)        if new_data:            html_outputer.collect_data(new_data)        if count == 10:            break        count = count + 1    html_outputer.output_html()if __name__ == '__main__':    root_url = 'http://news.zzuli.edu.cn/'    craw(root_url)

test_64

from bs4 import BeautifulSoupimport rehtml_doc = """<html><head><title>The Dormouse's story</title></head><body><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>"""soup = BeautifulSoup(html_doc, 'html.parser')print('获取所有链接')links = soup.find_all('a')for link in links:    print(link.name, link['href'], link.get_text())print('获取lacie链接')link_node = soup.find('a', href='http://example.com/lacie')print(link_node.name, link_node['href'], link_node.get_text())print('正则匹配')link_node = soup.find('a', href=re.compile(r'ill'))print(link_node.name, link_node['href'], link_node.get_text())print('获取P段落文字')p_node = soup.find('p', class_='title')print(p_node.name, p_node.get_text())

urls_manager

new_urls = set()old_urls = set()def add_new_url(url):    if url is None:        return    if url not in new_urls and url not in old_urls:        new_urls.add(url)def add_new_urls(urls):    if urls is None or len(urls) == 0:        return    for url in urls:        add_new_url(url)def get_new_url():    new_url = new_urls.pop()    old_urls.add(new_url)    return new_urldef has_new_url():    return len(new_urls) != 0

看完了这篇文章,相信你对“如何使用python实现垂直爬虫系统”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯