基础爬虫

39 篇文章 3 订阅

更多爬虫实例请见 https://blog.csdn.net/weixin_39777626/article/details/81564819这里写图片描述

URL管理器

class UrlManager():
    def __init__(self):
        self.new_urls=set()
        self.old_urls=set()
        
    def has_new_url(self):
        return self.new_url_size()!=0
    
    def get_new_url(self):
        new_url=self.new_urls.pop()
        self.old_urls.add(new_url)
        return new_url
    
    def add_new_url(self,url):
        if url is None:
            return
        if url not in self.new_urls and url not in self.old_urls:
            self.new_urls.add(url)
            
    def add_new_urls(self,urls):
        if urls is None or len(urls)==0:
            return
        for url in urls:
            self.add_new_url(url)
            
    def new_url_size(self):
        return len(self.new_urls)
    
    def old_url_size(self):
        return len(self.old_urls)

HTML下载器

import requests

class HtmlDownloader():
    def download(self,url):
        if url is None:
            return None
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.3.2.17331',
            'Referer': r'https://baike.baidu.com',
            'Connection': 'keep-alive'
        }
        r=requests.get(url,headers=headers)
        if r.status_code==200:
            r.encoding='utf-8'
        return r.text

HTML解析器

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

class HtmlParser():
    def parser(self,page_url,html_cont):
        if page_url is None or html_cont is None:
            return 'Empty !!!'
        soup=BeautifulSoup(html_cont,'html.parser',from_encoding='utf-8')
        new_urls=self._get_new_urls(page_url,soup)
        new_data=self._get_new_data(page_url,soup)
        return new_urls,new_data
    
    def _get_new_urls(self,page_url,soup):
        new_urls=set()
        links=soup.find_all('a',href=re.compile(r'\b(/item/)'))
        for link in links:
            new_url=link['href']
            new_full_url=urlparse.urljoin(page_url,new_url)
            new_urls.add(new_full_url)
        return new_urls
    
    def _get_new_data(self,page_url,soup):
        data={}
        data['url']=page_url
        title=soup.find('dd','lemmaWgt-lemmaTitle-title').find('h1')
        data['title']=title.get_text()
        summary=soup.find('div','lemma-summary')
        data['summary']=summary.get_text()
        return data

数据存储器

import codecs

class DataOutput():
    def __init__(self):
        self.datas=[]
        
    def store_data(self,data):
        if data is None:
            return
        self.datas.append(data)
        
    def output_html(self):
        fout=codecs.open('/home/as/文档/爬虫/开发与项目实战/基础篇/save/baike.html','w',encoding='utf-8')
        fout.write('<html>')
        fout.write('<body>')
        fout.write('<table>')
        for data in self.datas:
            fout.write('<tr>')
            fout.write('<td>%s</td>'%data['url'])
            fout.write('<td>%s</td>'%data['title'])
            fout.write('<td>%s</td>'%data['summary'])
            fout.write('</tr>')
            self.datas.remove(data)
        fout.write('</table>')
        fout.write('</body>')
        fout.write('</html>')
        fout.close()

爬虫调度器

from firstSpider.Dataoutput import DataOutput
from firstSpider.HtmlDownloader import HtmlDownloader
from firstSpider.Htmlparser import HtmlParser
from firstSpider.UrlManager import UrlManager

class SpiderMan():
    def __init__(self):
        self.manager=UrlManager()
        self.downloader=HtmlDownloader()
        self.parser=HtmlParser()
        self.output=DataOutput()
        
    def crawl(self,root_url):
        self.manager.add_new_url(root_url)
        while(self.manager.has_new_url() and self.manager.old_url_size()<100):
            try:
                new_url=self.manager.get_new_url()
                html=self.downloader.download(new_url)
                new_urls,data=self.parser.parser(new_url,html)
                self.manager.add_new_urls(new_urls)
                self.output.store_data(data)
                print('已抓取 %s 个链接'%self.manager.old_url_size())
            except Exception as e:
                print('crawl failed')
        self.output.output_html()
        
spider_man=SpiderMan()
spider_man.crawl('https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711?fr=aladdin')

更多爬虫实例请见 https://blog.csdn.net/weixin_39777626/article/details/81564819

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,你需要安装一些必要的库,比如:requests,BeautifulSoup,urllib和re。 然后,编写一个函数来获取页面内容并返回HTML内容。 接下来,创建一个BeautifulSoup对象,用来解析HTML内容。接着,使用find方法或findAll方法来提取相关的信息,然后保存到一个变量中。最后,使用一个循环来迭代多个页面,从而抓取所有页面的内容。 ### 回答2: 爬虫是一种自动抓取互联网数据的程序,而Python是一种功能强大的编程语言,非常适合编写爬虫代码。以下是一个用Python编写的基础爬虫代码示例: import requests from bs4 import BeautifulSoup # 定义一个函数来获取网页内容 def get_html(url): try: response = requests.get(url) response.raise_for_status() # 如果请求失败,会抛出异常 response.encoding = response.apparent_encoding # 设置编码方式为网页内容的编码方式 return response.text except Exception as e: print("爬取网页出错:" + str(e)) return None # 定义一个函数来提取所需数据 def parse_html(html): soup = BeautifulSoup(html, 'html.parser') # 创建一个BeautifulSoup对象,用于解析网页 # 根据网页的结构,使用相应的方法提取所需的数据 data_list = [] # TODO: 根据实际需求,通过soup对象提取数据,并将数据存入data_list列表中 return data_list # 主函数 def main(): url = "https://www.example.com" # 待抓取的网页链接 html = get_html(url) # 获取网页内容 if html: data_list = parse_html(html) # 提取所需数据 # TODO: 根据实际需求,对data_list中的数据进行处理或保存 # 调用主函数开始爬取数据 main() 以上代码中,首先导入requests库来进行HTTP请求,同时导入BeautifulSoup库以便解析网页内容。接着定义了get_html函数来获取网页内容,其中使用try-except块来捕获异常,保证程序的健壮性。然后定义parse_html函数来提取所需的数据,这里使用BeautifulSoup库将网页内容转化成可提取数据的格式,并根据实际需求使用相应的方法提取数据。最后,在主函数中调用get_html函数来获取网页内容,然后调用parse_html函数来提取数据,最后根据实际需求对数据进行处理或保存。以上代码只是一个基础爬虫框架,具体的实现要根据实际需求进行适当修改和完善。 ### 回答3: 下面是一个基础的Python爬虫代码示例: ```python import requests from bs4 import BeautifulSoup # 定义需要爬取的网页URL url = "http://example.com" # 发送请求 response = requests.get(url) # 解析网页内容 soup = BeautifulSoup(response.text, "html.parser") # 提取需要的数据 data = soup.find("div", {"class": "content"}).text # 打印提取的数据 print(data) ``` 这个示例中,首先导入了需要用到的库:requests用于发送HTTP请求,BeautifulSoup用于解析网页内容。然后定义了要爬取的网页URL。接下来发送请求并获取响应内容。然后使用BeautifulSoup解析HTML内容,并根据HTML结构提取需要的数据。最后打印出提取的数据。 当然,这只是一个基础爬虫代码示例,实际的爬虫可能需要更复杂的处理,比如处理分页、处理JavaScript动态加载的内容等。同时,需要注意合法和合理地使用爬虫,遵守网站的爬虫协议,并尊重网站的隐私政策和使用条款。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值