【scrapy实战】---- 利用get方法爬取动态网站,将数据存入到postgresql中

我以极客公园为例,爬取文章标题,作者名,文章摘要。

我们打开chrome中的开发者工具,然后我们重新加载一下网页,你可以看到文章标题需要你点加载更多才能出现,之后你会看到如下显示:

我们在General中的Request Method看到是GET,说明这个请求方法是GET方法,之后你会发现并没有post方法,所以用Splash似乎不行。再多点加载更多让文章出现得更多,你会发现Request URL的变化只有page的页数。换句话说就是:

第一页是:https://mainssl.geekpark.net/api/v2?page=1

第二页是:https://mainssl.geekpark.net/api/v2?page=2

第三页是:https://mainssl.geekpark.net/api/v2?page=3

..........................

第n页是:  https://mainssl.geekpark.net/api/v2?page=n

之后我们打开其中一页,比如第一页:

你会看到网页是以json形式存储的,并且一个page存储20篇文章,但要注意文章是从0开始的。(之后我们写代码是这里会很重要)

打开其中一篇文章你可以看到:

这时候你可以看到文章的标题,摘要,作者名,id,发表时间等等。然后开始写代码了~~

在item.py中我们先定义item数据结构:

之后写爬虫:

打开终端输入scrapy crawl geekpark。爬虫就会运行成功。但是我们并没有将数据存入,之后我在postgresql中建一个关于爬虫数据相关的表。并在scrapy项目中的pipeline.py写下如下代码:

之后再运行一次爬虫就可以了。数据在postgresql中就存成这样了:

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用elasticsearch-dsl可以很方便地将Scrapy爬取数据存储到Elasticsearch。 首先,需要在Scrapy项目安装elasticsearch-dsl: ``` pip install elasticsearch-dsl ``` 然后,在Scrapy项目的settings.py文件添加以下代码: ``` ELASTICSEARCH_HOST = 'localhost' ELASTICSEARCH_PORT = 9200 ELASTICSEARCH_USERNAME = '' ELASTICSEARCH_PASSWORD = '' ELASTICSEARCH_INDEX = 'my_index' ELASTICSEARCH_TYPE = 'my_type' ``` 这里需要设置Elasticsearch的主机名、端口号、用户名、密码、索引名称和类型名称。 接下来,在Scrapy项目的pipelines.py文件编写以下代码: ``` from elasticsearch_dsl.connections import connections from elasticsearch_dsl import DocType, Text, Date, Integer from scrapy.utils.project import get_project_settings class MyItem(DocType): title = Text() content = Text() publish_date = Date() view_count = Integer() class Meta: index = get_project_settings().get('ELASTICSEARCH_INDEX') doc_type = get_project_settings().get('ELASTICSEARCH_TYPE') class ElasticsearchPipeline(object): def __init__(self): settings = get_project_settings() self.es = connections.create_connection( hosts=[{'host': settings.get('ELASTICSEARCH_HOST'), 'port': settings.get('ELASTICSEARCH_PORT')}], http_auth=(settings.get('ELASTICSEARCH_USERNAME'), settings.get('ELASTICSEARCH_PASSWORD')) ) def process_item(self, item, spider): my_item = MyItem(title=item['title'], content=item['content'], publish_date=item['publish_date'], view_count=item['view_count']) my_item.save(using=self.es) return item ``` 这里定义了一个MyItem类,包含了需要存储到Elasticsearch的字段。ElasticsearchPipeline类则是对数据进行处理和存储的类,其在初始化方法连接Elasticsearch,将数据保存到Elasticsearch的process_item方法则是通过创建MyItem对象并调用save方法来完成的。 最后,在Scrapy项目的settings.py文件添加以下代码启用ElasticsearchPipeline: ``` ITEM_PIPELINES = { 'my_project.pipelines.ElasticsearchPipeline': 300, } ``` 这样,爬取到的数据就会自动存储到Elasticsearch了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值