关于scrapy框架使用的笔记

1.parse.urljoin(base,url)的使用

from urllib import parse
Request(url=parse.urljoin(response.url, url), callback=self.parse_detail)

提取出response.url的主域名与url(/111954/)做url的拼接。若url中有域名,拼接时不会用response.url提取出的主域名。

2.在Request上绑定数据,利用meta

from scrapy.http import Request
yield Request(url=parse.urljoin(response.url, article_url), 
              meta={"image_url": image_url},
              callback=self.parse_detail)

数据提取:

front_image_url = response.meta.get("image_url","")

3.设置图片自动下载

settings.py中的基本配置:

ITEM_PIPELINES = {
    'ArtSpider.pipelines.ArtspiderPipeline': 300,
    'scrapy.pipelines.images.ImagesPipeline': 1,
}
# 为scrapy配置要从item中取出的参数
IMAGES_URLS_FIELD = "front_image_url"

# 设置图片的下载路径
project_dir = os.path.dirname(os.path.abspath(__file__))
IMAGES_STORE=os.path.join(project_dir,'images')

特别注意:在为item中的图片路径(front_image_url)赋值时,值必须是一个list。

 
article_item['front_image_url'] = [front_image_url]

因为在scrapy.pipelines.images.ImagePipeline中,会对这个值进行遍历。

    def get_media_requests(self, item, info):
        return [Request(x) for x in item.get(self.images_urls_field, [])]

自定义pipeline,获取图片存放的地址与名称,以方便与对应的item联系起来:

class ArticleImagePipeline(ImagesPipeline):
    """
    自定义pipeline方法,继承scrapy.pipelines.images.ImagesPipeline,并重载item_completed
    """

    def item_completed(self, results, item, info):
        for ok, value in results:
            front_image_path = value['path']
        item['front_image_path'] = front_image_path
        # 返回item以方便后面的pipeline对item进行处理
        return item

settings.py设置:

ITEM_PIPELINES = {
    'ArtSpider.pipelines.ArtspiderPipeline': 300,
    # 'scrapy.pipelines.images.ImagesPipeline': 1,
    'ArtSpider.pipelines.ArticleImagePipeline': 1,
}

4.数据更新(mysql方式,其它数据库不适用)

insert_sql = """
                        insert into jobbole_article(title,url,create_date,fav_nums,url_object_id,front_image_url,
                                front_image_path,praise_nums,comment_nums,tags,content) 
                        values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
                        on duplicate key update fav_nums=values(fav_nums),comment_nums=values(comment_nums);
                        """

在插入数据时,若主键已存在,表明数据已存在,更新数据;若主键不存在,则插入数据。

5.python爬虫小工具:(模块:copyhreaders,直接复制头文件,无须挨个添加双引号)

pip install copyhreaders

from copyheaders import headers_raw_to_dict
post_headers_raw = b"""
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding:gzip, deflate, sdch
    Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2
    Connection:keep-alive
    Host:www.zhihu.com
    User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
    Referer:http://www.zhihu.com/
"""
headers = headers_raw_to_dict(post_headers_raw)

项目地址:https://github.com/jin10086/copyheaders

6.用于在删除提取内容中的html tag

# 用于删除提取的html中的tag
from w3lib.html import remove_tags

job_desc = scrapy.Field(
        input_processor=MapCompose(remove_tags)
    )

7.自定义setting

在spider类中:

custom_settings = {

        "COOKIES_ENABLED":True

}

@classmethod
def update_settings(cls, settings):
    settings.setdict(cls.custom_settings or {}, priority='spider')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy是一个纯Python实现的应用框架,用于爬取网站数据和提取结构化数据。它具有以下优势: 1. 简单易用:用户只需要定制开发几个模块,就可以轻松地实现一个爬虫,用于抓取网页内容和图片等。 2. 高效快捷:Scrapy使用了Twisted异步网络框架来处理网络通讯,加快网页下载速度。它还提供了各种中间件接口,能够灵活地满足各种需求。 Scrapy框架的运行和部署可以通过Scrapyd来管理。Scrapyd是一个用于管理Scrapy的部署和运行的服务程序。它通过发送请求来控制Scrapy项目的运行、停止、结束或删除等操作。同时,Scrapyd还可以管理多个爬虫,方便我们部署Scrapy并查看爬虫日志。 如果想在Django中运行Scrapy框架,可以参考一些示例代码。这些示例代码详细介绍了如何在Django中集成和运行Scrapy框架,对于学习和工作具有一定的参考价值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [scrapy爬虫框架及运行流程](https://blog.csdn.net/weixin_42213622/article/details/106138594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [笔记十五:如何使用scrapyd去部署和运行scrapy框架](https://blog.csdn.net/qq_41082423/article/details/82876939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [如何在django中运行scrapy框架](https://download.csdn.net/download/weixin_38613548/12853073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值