美文网首页大数据玩转大数据大数据 爬虫Python AI Sql
多年开发工程师做的爬虫笔记,抓紧时间速度收藏!

多年开发工程师做的爬虫笔记,抓紧时间速度收藏!

作者: Python编程社区 | 来源:发表于2018-07-26 09:17 被阅读18次

    平时有个习惯,会把自己的笔记写在有道云里面,现在做个整理。会长期更新,因为我是BUG制造机。

    解析

    xpath提取所有节点文本

    我左青龙,右白虎,
      上朱雀,
    • 下玄武。
    老牛在当中,龙头在胸口。

    使用xpath的string(.)

    #!/usr/bin/env python

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

    from scrapy.selector import Selector

    text = '

    我左青龙,右白虎,
      上朱雀,
    • 下玄武。
    老牛在当中,龙头在胸口。'

    s = Selector(text=text)

    data = s.xpath('//div[@id="test3"]')

    info = data.xpath('string(.)').extract()[0]

    print(info)

    # output: 我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。

    如何解决详情页面元素改变

    这个问题是这样产生的,在很多PC站,比如链家,这个页面有这些字段A,但是下个页面这个字段A没了,取而代之的是字段B,在xpath定位时就失效了。这个问题很常见,大体思路是这样的。

    创建一个包含所有字段的dict: data = {}.fromkeys(('url', 'price', 'address'))

    然后根据网页中是否有字段来取值,例如,有’url’就取对应的value,没有则为空

    这样就可以完美解决匹配不全问题

    Scrapy 相关

    文件编写

    逻辑文件和解析部分分开写,匹配文件目录是utils/parse/,爬虫文件目录是spiders/

    Scrapy 中文乱码

    在 setting 文件中设置:FEED_EXPORT_ENCODING = 'utf-8'

    Scrapy 使用Mongo

    pipelines.py

    首先我们要从settings文件中读取数据的地址、端口、数据库名称。

    拿到数据库的基本信息后进行连接。

    将数据写入数据库(update制定唯一键)

    关闭数据库

    注意:只有打开和关闭是只执行一次,而写入操作会根据具体的写入次数而定。

    Redis 无需关闭

    import pymongo

    class MongoDBPipeline(object):

    """

    1、连接数据库操作

    """

    def __init__(self,mongourl,mongoport,mongodb):

    '''

    初始化mongodb数据的url、端口号、数据库名称

    :param mongourl:

    :param mongoport:

    :param mongodb:

    '''

    self.mongourl = mongourl

    self.mongoport = mongoport

    self.mongodb = mongodb

    @classmethod

    def from_crawler(cls,crawler):

    """

    1、读取settings里面的mongodb数据的url、port、DB。

    :param crawler:

    :return:

    """

    return cls(

    mongourl = crawler.settings.get("MONGO_URL"),

    mongoport = crawler.settings.get("MONGO_PORT"),

    mongodb = crawler.settings.get("MONGO_DB")

    )

    def open_spider(self,spider):

    '''

    1、连接mongodb数据

    :param spider:

    :return:

    '''

    self.client = pymongo.MongoClient(self.mongourl,self.mongoport)

    self.db = self.client[self.mongodb]

    def process_item(self,item,spider):

    '''

    1、将数据写入数据库

    :param item:

    :param spider:

    :return:

    '''

    name = item.__class__.__name__

    # self.db[name].insert(dict(item))

    self.db['user'].update({'url_token':item['url_token']},{'$set':item},True)

    return item

    def close_spider(self,spider):

    '''

    1、关闭数据库连接

    :param spider:

    :return:

    '''

    self.client.close()

    scrapy图片下载

    import scrapy

    from scrapy.pipelines.images import ImagesPipeline

    from scrapy.exceptions import DropItem

    class MyImagesPipeline(ImagesPipeline):

    def get_media_requests(self, item, info):

    for image_url in item['image_urls']:

    yield scrapy.Request(image_url)

    def item_completed(self, results, item, info):

    image_paths = [x['path'] for ok, x in results if ok]

    if not image_paths:

    raise DropItem("Item contains no images")

    item['image_paths'] = image_paths

    return item

    scrapy 暂停爬虫

    scrapy crawl somespider -s JOBDIR=crawls/somespider-1

    scrapy_redis 分布式

    使用队列与去重即可完成分布式需求,需要注意的是 Redis 格式,默认采用的是 list, 可以在 settings.py 文件中设置 REDIS_START_URLS_AS_SET = True,使用 Redis的 set类型(去重种子链接)

    安装

    超时问题

    自定义超时时间

    sudo pip3 --default-timeout=100 install -U scrapy

    或者 使用其他源

    sudo pip3 install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

    权限问题

    安装某模块时,报错:PermissionError: [WinError 5] 拒绝访问。: 'c:\program files\python35\Lib\sit e-packages\lxml'

    最简单方法:pip install --user lxml

    Pycharm 相关

    .gitignore 文件

    安装插件: Preferences > Plugins > Browse repositories... > Search for ".ignore" > Install Plugin

    然后就可以很方便的添加到 .gitignore

    显示函数

    点击 Show Members,查看目录,会显示相应的类和函数

    激活码

    http://idea.liyang.io

    http://xidea.online

    数据

    Mongo导出命令

    λ mongoexport -d test -c set --type=csv -f name,age -o set.csv

    λ mongoexport -h 10.10.10.11 -d test -c test --type=csv -f url,id,title -o data.csv

    其他

    requirements.txt 文件

    小提示:使用 pigar 可以一键生成 requirements.txt 文件

    Installation:pip install pigar

    Usage:pigar

    好了,今天先写这点,以后再补上。

    相关文章

      网友评论

        本文标题:多年开发工程师做的爬虫笔记,抓紧时间速度收藏!

        本文链接:https://www.haomeiwen.com/subject/ypuvmftx.html