解决方案:03 增量爬虫技术

优采云 发布时间: 2022-12-25 22:52

  解决方案:03 增量爬虫技术

  01 专注爬虫技术

  聚焦爬虫也是主题爬虫。 专注爬虫技术增加了链接评估和内容评估模块,其爬虫策略的重点是评估页面内容和链接的重要性。

  基于链接评估的爬虫策略主要将网页作为半结构化文档,其中收录大量的结构信息,可以用来评估链接的重要性。 另一种方法是利用Web结构来评估链接的价值,即HITS法,通过计算每个被访问页面的Authority权重和Hub权重来确定链接访问的顺序。

  基于内容评价的爬虫策略主要是应用类似于文本的计算方法,提出Fish-Search算法,以用户输入的查询词为主题。 随着算法的进一步改进,Shark-Search算法可以使用空间向量模型来计算页面和主题的相关性大小。

  面向主题的爬虫、面向需求的爬虫:它会针对特定的内容爬取信息,并会尽可能保证信息和需求的相关性。 下面显示了一个如何使用聚焦爬虫的简单示例。

  import urllib.request     # 爬虫专用的包urllib,不同版本的Python需要下载不同的爬虫专用包 import re     # 正则用来规律爬取 keyname=""     # 想要爬取的内容 key=urllib.request.quote(keyname)     # 需要将你输入的keyname解码,从而让计算机读懂 for i in range(0,5):   # (0,5)数字可以自己设置,是淘宝某产品的页数     url="https://s.taobao.com/search?q="+key+"&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20180815&ie=utf8&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s="+str(i*44) # url后面加上你想爬取的网站名,然后你需要多开几个类似的网站以找到其规则 # data是你爬取到的网站所有的内容要解码要读取内容     pat='"pic_url":"//(.*?)"' # pat使用正则表达式从网页爬取图片 # 将你爬取到的内容放在一个列表里面     print(picturelist)     # 可以不打印,也可以打印下来看看     for j in range(0,len(picturelist)):         picture=picturelist[j]         pictureurl="http://"+picture         # 将列表里的内容遍历出来,并加上http://转到高清图片         file="E:/pycharm/vscode文件/图片/"+str(i)+str(j)+".jpg"         # 再把图片逐张编号,不然重复的名字将会被覆盖掉         urllib.request.urlretrieve(pictureurl,filename=file)         # 最后保存到文件夹 

  02 通用爬虫技术

  通用网络爬虫是整个网络爬虫。 其实现过程如下。

  

  第五,当满足爬虫系统设置的停止条件时,停止爬虫。 在写爬虫的时候,一般都会设置相应的停止条件。 如果不设置停止条件,爬虫会继续爬取,直到获取不到新的URL地址。 如果设置了停止条件,爬虫会在满足停止条件时停止爬行。 详见图2-5右下子图。

  通用爬虫技术的应用有不同的爬取策略,其中广度优先策略和深度优先策略更为关键。 例如,深度优先策略的实现是按照深度从低到高的顺序访问下一级网页链接。

  下面是一个如何使用普通爬虫的例子。

  ''' 爬取京东商品信息:     请求url:https://www.jd.com/     提取商品信息:         1.商品详情页         2.商品名称         3.商品价格         4.评价人数         5.商品商家 ''' from selenium import webdriver    # 引入selenium中的webdriver from selenium.webdriver.common.keys import Keys import time  def get_good(driver):     try:          # 通过JS控制滚轮滑动获取所有商品信息         js_code = '''             window.scrollTo(0,5000);         '''         driver.execute_script(js_code)  # 执行js代码          # 等待数据加载         time.sleep(2)          # 查找所有商品div         # good_div = driver.find_element_by_id('J_goodsList')         good_list = driver.find_elements_by_class_name('gl-item')         n = 1         for good in good_list:             # 根据属性选择器查找             # 商品链接             good_url = good.find_element_by_css_selector(                 '.p-img a').get_attribute('href')              # 商品名称             good_name = good.find_element_by_css_selector(                 '.p-name em').text.replace("\n", "--")              # 商品价格             good_price = good.find_element_by_class_name(                 'p-price').text.replace("\n", ":")              # 评价人数             good_commit = good.find_element_by_class_name(                 'p-commit').text.replace("\n", " ")              good_content = f'''                         商品链接: {good_url}                         商品名称: {good_name}                         商品价格: {good_price}                         评价人数: {good_commit}                         \n                         '''             print(good_content)             with open('jd.txt', 'a', encoding='utf-8') as f:                 f.write(good_content)          next_tag = driver.find_element_by_class_name('pn-next')         next_tag.click()          time.sleep(2)          # 递归调用函数         get_good(driver)          time.sleep(10)      finally:         driver.close()   if __name__ == '__main__':      good_name = input('请输入爬取商品信息:').strip()      driver = webdriver.Chrome()     driver.implicitly_wait(10)     # 往京东主页发送请求     driver.get('https://www.jd.com/')      # 输入商品名称,并回车搜索     input_tag = driver.find_element_by_id('key')     input_tag.send_keys(good_name)     input_tag.send_keys(Keys.ENTER)     time.sleep(2)      get_good(driver) 

  03 增量爬虫技术

  有些网站会在原有网页数据的基础上定期更新一批数据。 比如电影网站会实时更新一批近期的热门电影,小说网站会根据作者的创作进度实时更新最新的章节数据。 遇到类似的场景,我们可以使用增量爬虫。

  增量爬虫技术(incremental Web crawler)是通过爬虫程序监测某个网站的数据更新情况,从而爬取网站更新后的新数据。

  关于如何进行增量爬取工作,下面给出三种检测重复数据的思路:

  发送请求前先判断该URL是否已经被抓取; 解析内容后判断内容是否被爬取; 在写入存储介质时判断该内容是否已经存在于介质中。

  不难发现,增量爬取的核心是去重。 目前有两种去重方法。

  

  下面显示了如何使用增量爬虫的示例。

  import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from redis import Redis from incrementPro.items import IncrementproItem class MovieSpider(CrawlSpider):     name = 'movie'     # allowed_domains = ['www.xxx.com']     start_urls = ['http://www.4567tv.tv/frim/index7-11.html']     rules = (         Rule(LinkExtractor(allow=r'/frim/index7-\d+\.html'), callback='parse_item', follow=True),     )     # 创建Redis链接对象     conn = Redis(host='127.0.0.1', port=6379)     def parse_item(self, response):         li_list = response.xpath('//li[@class="p1 m1"]')         for li in li_list:             # 获取详情页的url             detail_url = 'http://www.4567tv.tv' + li.xpath('./a/@href').extract_first()             # 将详情页的url存入Redis的set中             ex = self.conn.sadd('urls', detail_url)             if ex == 1:                 print('该url没有被爬取过,可以进行数据的爬取')                 yield scrapy.Request(url=detail_url, callback=self.parst_detail)             else:                 print('数据还没有更新,暂无新数据可爬取!')      # 解析详情页中的电影名称和类型,进行持久化存储     def parst_detail(self, response):         item = IncrementproItem()         item['name'] = response.xpath('//dt[@class="name"]/text()').extract_first()         item['kind'] = response.xpath('//div[@class="ct-c"]/dl/dt[4]//text()').extract()         item['kind'] = ''.join(item['kind'])         yield it 

  管道文件:

  from redis import Redis class IncrementproPipeline(object):     conn = None     def open_spider(self,spider):         self.conn = Redis(host='127.0.0.1',port=6379)     def process_item(self, item, spider):         dic = {             'name':item['name'],             'kind':item['kind']             }         print(dic)         self.conn.push('movieData',dic)             # 如果push不进去,那么dic变成str(dic)或者改变redis版本            pip install -U redis==2.10.6         return item 

  04 深网爬虫技术

  在互联网中,网页按存在方式可分为表层网页和深层网页。

  所谓表层网页是指无需提交表单,使用静态链接即可到达的静态页面; 而深层网页则隐藏在表单后面,无法通过静态链接直接获取,需要提交一定的关键词才能访问。 得到的页面中最重要的部分是表单填写部分。

  在互联网中,深层网页的数量往往远大于表层网页的数量。 因此,我们需要想办法爬取深层网页。

  深网爬虫的基本组成:URL列表、LVS列表(LVS是指标签/值集合,即填写表单的数据源)、爬取控制器、解析器、LVS控制器、表单分析器、表单处理器、响应*敏*感*词*。

  深网爬虫的填表方式有两种:

  技术和经验:利用cms建站有什么优势

  使用cms建站的优势如下

  1.网站线速度快

  

  使用cms建站的用户只需在网站模板中选择自己喜欢的模板并部署上线,上线后即可添加网站内容。

  2.安全稳定

  cms系统由于其开源的特点拥有大量的用户,用户在使用过程中发现的问题和当前国网安全联盟的白帽技术爱好者挖出的漏洞都在cms的不断修复和升级中厂商,所以只要及时将网站的管理升级到最新版本的cms ,就可以保证网站的安全稳定。

  3、有利于网站推广

  

  一个成熟的cms系统对于SEO有着完整的设计理念和配置机制。 网站后,只要选择合适的关键词,并在后台设置SEO参数,网站的关键词排名比其他建站方式更容易,排名也更高。

  4.方便的网站管理

  cms功能齐全,支持可视化编辑。 网站上线后,您可以在后台修改网站所有的文字、图片、栏目等内容,还可以修改网站的颜色等样式。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线