java爬虫获取网页数据,爬虫获取app数据

  java爬虫获取网页数据,爬虫获取app数据

  一、环境OS:win10python:3.6scrapy:1.3.2pymongo:3.2pycharm环境是百度搭建的。

  二。本节内容描述本节主要抓取了小号中不包含的所有数字货币的详细链接和数字货币名称。

  三、数据库描述1。货币详情页的链接不是小号,里面有1536种数字货币的信息:

  http://www.feixiaohao.com

  为了给后面捕捉详细信息做准备,我们需要先捕捉详细页面的地址,所以我们只需要货币名称和对应的URL,然后是数字货币中链接地址数据库设计的id。如下所示:

  名称#类别名称url #类别url _id #类别id IV。爬行的描述。既然非小号网站提供了在首页显示所有数字货币的功能,我们就不需要逐页抓取了,偷懒吧:

  以下抓取直接使用显示所有数字货币的链接:

  1.http://www.feixiaohao.com/all/.在你的工作目录中创建新的scrapy项目。使用以下命令:

  Scrapy startproject硬币目录结构如下:

  Coins/scrapy.cfgcoins/_ _ init _ _。pyitems.pypipelines.pysettings.pyspiders/_ _ init _ _。巴拉圭.2.设置使用mongodb存储数据的设置,并在设置文件中添加以下信息:

  item _ pipelines={ coin spider . pipelines . MongoDB pipeline :403,} 3。mongodb管道的定义将以下类添加到pipelines.py文件中:

  类MongoDBPipeline(object):def _ _ init _ _(self):clinet=py mongo。MongoClient(localhost ,2017)db=clinet[ coins ]self . coin URL=db[ coin URL ]def process _ item(self,item,spider): 判断物品类型,进行相应处理,重新进入数据库 if isinstance(item,CoinUrl): try: count=self。coin URL . find({ name :item[ name ]})。count()如果count 0: self。coin URL . update({ name :item[ name ]},Dict(item))else:self . coin URL . insert(Dict(item))except exception as e:print(e)pass为了防止数据被重复写入,在写入数据之前需要判断数据库中是否已经存储了相应的信息。如果有,更新相应信息,如果没有,直接插入。

  4.建立数据库。在items.py文件中创建一个新的文档类,它与我们之前设计的数据库是一致的。相关代码如下:

  导入scrapy class coin URL(scrapy . item):_ id=scrapy . field()URL=scrapy . field()name=scrapy . field()5 .创建一个爬网程序文件。在Spider目录下创建一个新的python文件,使用命令CoinSpider.py作为我们的爬虫文件,并在文件中创建一个新的CoinSpider。并且需要定义以下三个属性:

  名称:

  用来区分蜘蛛。该名称必须是唯一的,并且不能为不同的蜘蛛设置相同的名称。开始网址:

  包含蜘蛛在启动时爬网的URL列表。因此,要检索的第一个页面将是其中之一。Start_requests()是spider的一个方法,在爬虫运行时调用。相关代码如下:

  import re import JSON import time import requests import logging from scrapy import Spider,selector from scrapy . http import requests from coin Spider . items import * class coin Spider(Spider):name= coin Spider allowed _ domains=[ feixiaohao . com ]start _ URLs=[ http://www . feixiaohao . com/all/]logging . get logger( requests )。setLevel(日志记录。WARNING) #将请求的日志级别设置为WARNING tool=tool()def start _ requests(self):for URL in self . start _ URLs:yield request(URL=URL,Callback=self.parse_coin) 6 .页面分析。查看页面上的信息,可以发现数字货币的所有信息都在一个表格里:

  每种数字货币的详细地址和名称都在它的第一个标签中:

  所以我们只需要首先获取每种数字货币的A标签的内容,并通过选择器的xpath定位它:

  //div[@ class= box contain ]/table/tbody/tr/TD/A 获取一个标签的所有内容。请注意,捕获的结果是一个列表。

  我们需要的是详细信息的地址和名称在A标签和img子标签的alt值的链接中:

  所以我们通过正则表达式提取它:

  r a rel= external no follow rel= external no follow href=(。*?) target=_blank 。*?alt=(。*?)因为是多行提取,所以需要加re。代码中的项。有关详细信息,请参见以下代码。

  从页面元素中可以知道,每种数字货币的Item下都有很多其他信息,除了我们需要成为A的那个,也放在A标签里:

  但是这些A标签显然不符合我们上面提取信息的正则表达式,所以通过上面的正则表达式,得到的信息是空的,我们只需要过滤这部分信息。

  详细代码如下:

  Selector=Selector(response)items=Selector . XPath(//div[@ class= box contain ]/table/tbody/tr/TD/a )。items:URLs=re . find all(r a rel= external no follow rel= external no follow href=(。*?) target=_blank 。*?alt=(。*?)“”,项目,回复s)iflen(URLs)0:print(URLs[0][0])print(URLs[0][1])7。抓取过程

  文章里已经贴了基本代码,写的比较乱。欢迎大家一起探讨。

  部分数据截图:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: