来自 奥门威尼斯网址 2019-11-28 05:36 的文章
当前位置: 威尼斯国际官方网站 > 奥门威尼斯网址 > 正文

【奥门威尼斯网址】step_by_step_用python爬点磁力链

爬点东西 -Scrapy

最近因为工作需要,自学了python、scrapy并且写出了自己的第一个爬虫项目。记录过程:

今天是小年,团聚的日子,想想这一年中发生过大大小小的事,十分感慨。

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

错事: 这一年我怀疑过最不该怀疑的人 这一年我相信过最不该信任的人

安装Setuptools&Pip以及scrapy

  • ##### 安装Pip

最新版本的linux发行版(CentOS,Fedora,RHEL以及Ubuntu)都自带python2.7以及python3,默认情况下使用的是Python2.7,因此在terminal中输入$ python --version的时候找的是python2,若想使用Python3,可以输入$ python3 --version

Setuptools和Pip是最重要的两个python第三方软件安装包,它们可以实现一行命令自动下载所需要的应用包到python库里面供项目使用。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

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

关键词: