来自 威尼斯国际官方网站 2019-10-02 13:50 的文章
当前位置: 威尼斯国际官方网站 > 威尼斯国际官方网站 > 正文

scrapy爬虫入门,step_by_step_用python爬点磁力链接

爬点东西 -Scrapy

前段时间因为专业急需,自学了python、scrapy并且写出了友好的首先个爬虫项目。记录进度:

今日是谢节,团聚的光阴,想想那年中爆发过大大小小的事,十一分惊叹。

  • 所用的系列:Ubuntu gnome 16.04
  • IDE: pycharm

谬误: 今年作者猜忌过最不应该猜疑的人 那一年自个儿信赖过最不应该信赖的人

安装Setuptools&Pip以及scrapy

  • ##### 安装Pip

风行版本的linux发行版(CentOS,Fedora,本田UR-VHEL以及Ubuntu)都自带python2.7以及python3,默许情形下行使的是Python2.7,因而在terminal中输入$ python --version的时候找的是python2,若想行使Python3,能够输入$ python3 --version

Setuptools和Pip是最关键的三个python第三方软件安装包,它们得以兑现一行命令自动下载所供给的使用包到pythonCurry面供项目利用。python2.7.9之后以及python3.4随后的版本均私下认可下载安装了Pip,能够采取$ command -v pip翻开Pip是还是不是业已安装。若未有设置,则足以先 下载get pip.py 到计算机,然后即可输入$ python pip.py来进行Pip的安装。

  • ##### 安装scrapy

在设置完毕了python以及pip之后,键入下边包车型客车指令安装scrapy

$ pip install scrapy

幡然醒悟: 世界上怎么的人都有,只是你想不到而已。 当你对别的壹个人说来自感到秘密的事,将在坦然接受秘密能被全数人得知的事实。 年轻依然已成过去

创立爬虫项目

在安装完结后scrapy之后,就能够成立爬虫项目了,首先,在terminal中步向想创设项指标目录(workspace),举个例子笔者正是/usr/local/pythonProjects,之后键入

$ scrapy startproject projectName  //最后的'projectName'替换为想要的项目名称

回车之后,scrapy就能自行为您创制爬虫目录,用python编辑器展开那些目录(推荐sublime text或许pycharm),会了若指掌项目目录结构如下:

projectName/
    scrapy.cfg
    projectName/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

这个文件分别表示:

  • scrapy.cfg:项目标总布局文件
  • projectName/item.py: 项目中的item文件。(个人通晓:类似于java中的pojo可能dto)
  • projectName/pipelines.py:项目中的pipeline文件。(用于将抓取到的多寡存进数据库中)
  • projectName/settings.py:项目中的设置文件。
  • projectName/spiders/:用来存在爬虫文件的目录,稍后将在那一个目录下写爬虫文件。

于今,多少个爬虫项目开创即使成功了,上边最早写代码啦。

疑问: 小编该去哪? 作者能做哪些?

编写item文件

item文件 是用来保存大家爬取到的多寡的器皿,爬取下来的数据会归入item中来封装进行下一步管理(存入数据库),所以,item文件其实就也等于java中的实体类(pojo),用来将大家必要的数码封装成四个一个的完好(对象)。由此,item文件须求我们对急需的多少和专门的学问需求进行深入分析之后来编排。

举例,作者所要爬取的网址是 平价质量检验部门的询问网址 中的全体机关的数量,对该网址中机构的数据结构进行剖析,发现供给的数目有 质检机构名称质检机构的注册编号 等消息,将每多个质量检验部门看作一个独自的靶子,写出item.py文本如下:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy

#类的名字根据实际情况更改
class CrawlerItem(scrapy.Item):
    name = scrapy.Field()   #质检机构名称
    register_id = scrapy.Field()  #机构的注册编号
    alias = scrapy.Field()    #报告/证书允许使用认可标识的其他名称
    contact = scrapy.Field()    #联系人
    phone_num = scrapy.Field()    #联系电话
    zip_code = scrapy.Field()    #邮政编码
    fax_num = scrapy.Field()    #传真号码
    website = scrapy.Field()    #网站地址
    email = scrapy.Field()    #电子邮箱
    company_address = scrapy.Field()    #公司地址
    validity_term = scrapy.Field()    #认可有效期限
    ability_range = scrapy.Field()    #能力范围
    close_project = scrapy.Field()    #暂停项目/参数
    certificate = scrapy.Field()    #证书附件

一开首容许看起来很复杂,不过定义了item.py从此,您就足以很有益的行使scrapy的别的格局(举个例子pipeline.py中的方法),因为这个主意要求只要你对item的定义。

生存: 2017大概每日回去大部分时光都在玩游戏,何况稳步开掘和自个儿一齐玩游戏的网民年龄是那么的小 ,我想应该是自身这几个岁数的人都结合了,为了家庭忙于职业,而自己居然混的这么惨,陡然以为自己还并未有备选好呢,刚毕业四年将在面对这么些事

编写制定第三个爬虫(Spider文件)

一个爬虫(Spider)是从多个或多个网址用来爬取须要的数码的类。

为了创制贰个爬虫,必得集成scrapy.Spider类,何况定义以下多少个属性和多少个方法:

  • name:爬虫的名字,必需独一,不能够有再一次名字的爬虫存在于三个品种中。
  • start_urls:贰个列表,由spider在起来起步的时候要求爬取的url组成,spider会爬取那个list中的全数url,能够在爬取到新url之后将新的url增多进来。
  • parse(self,response):此方法会在spider每爬取完了二个网页后调用,每便爬取网址下载的数据会通过response参数字传送递给此措施,在此措施中你可以对response举办操作。

了然了什么样编写spider之后,在目录projectName/spiders/ 下新建tutorial_spider.py文件,并编制代码:

import scrapy


class TutorialSpider(scrapy.Spider):
    name = 'tutorial'   #爬虫的名字
    start_urls = ['https://las.cnas.org.cn/LAS/publish/externalQueryL1.jsp']  #要爬取的网站列表

    def parse(self, response):
        print(response.body)    #打印网站的静态代码(此种方法无法获取由js动态生成的数据)

从此现在打开terminal,踏向项目根目录,如/usr/local/pythonProjects/projectName,键入以下命令以运维爬虫。

$ scrapy crawl spider_name   #将spider_name改为爬虫的名称(即name的值)

万一顺遂,您应该可以望见该网页的html代码了。当然,您也足以更动parse(self, response)中的代码,利用response做更加的多的事。

言归正传: 吐槽了一部分话,没事的时候多少个单身老哥们就只可以上上网打发打发时间,后来自家发掘一个网站相比好,但是作者做哪些它都弹广告,真的很烦啊。 近几天刚接触python ,想着可不得以和睦爬它点多少,目标是能够过滤掉他那些令人恨入骨髓的广告,当然也能够顺便熟稔一下python 的scrapy框架 那就起来吧

 

scrapy startproject btxxxx

scrapy genspider -t crawl btxxxx xxx.info

 

spider的代码

 

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from scrapy.linkextractors import LinkExtractor
 4 from scrapy.spiders import CrawlSpider, Rule
 5 import urllib
 6 from xxx.items import XxxxItem
 7 import sys
 8 
 9 reload(sys)
10 
11 sys.setdefaultencoding('utf8')
12 
13 class BtxxxxSpider(CrawlSpider):
14     name = 'btxxxx'
15     allowed_domains = ['btxxxx.info']
16     def __init__(self, key_word='', *args, **kwargs):
17         super(BtxxxxSpider, self).__init__(*args, **kwargs)
18         self.key_words = key_word
19         quote_str = urllib.quote(self.key_words)
20         # 网址就不搞出来啦
21         zero_url = 'http://www.xxxx.info/search/' + quote_str + '.html'
22         self.start_urls = [zero_url]
23 
24 
25     rules = (
26         Rule(LinkExtractor(allow=r'/search/b-[sS]*.html'),callback='root_url', follow=True),
27          Rule(   LinkExtractor(
28                 allow=r'/search/b-[a-z,A-Z,0-9]+/[0-9]+-[0-9]+.html'), callback='content_url', follow=True
29             ),
30         Rule(LinkExtractor(allow=r'/wiki/.*.html'), callback='parse_item', follow=False)
31     )
32 
33     def root_url(self, response):
34         pass
35 
36 
37     def content_url(self, response):
38         pass
39 
40 
41     def parse_item(self, response):
42         i = BtxxxxItem()
43         script_txt  = response.xpath('//*[@id="wall"]/h2/script/text()').extract()
44         if len(script_txt) !=0:
45             url_str = script_txt[0].replace('document.write(decodeURIComponent(', '').replace('));', '').replace('"','')
46             link_name = urllib.unquote(str(url_str.replace('+', '')))
47             i["file_name"] = link_name
48             print "*" * 10
49             #print link_name
50             print "*" * 10
51         file_nodes = response.xpath('//*[@id="wall"]/div/table/tr[last()]/td/text()').extract()
52         print "#" * 10
53         print file_nodes
54         print "#" * 10
55         if len(file_nodes) > 0 :
56             i["file_type"] = file_nodes[0].replace('n', '')
57             i["file_createtime"] = file_nodes[1].replace('n', '')
58             i["file_hot"] = file_nodes[2].replace('n', '')
59             i["file_size"] = file_nodes[3].replace('n', '')
60         i["file_url"] = response.url
61         file_link = response.xpath('//*[@id="wall"]/div[1]/div[1]/div[2]/a/@href').extract()
62         if len(file_link) > 0:
63             i["file_link"] = file_link[0]
64         yield i

本文由威尼斯国际官方网站发布于威尼斯国际官方网站,转载请注明出处:scrapy爬虫入门,step_by_step_用python爬点磁力链接

关键词: