通过一段时间对爬虫的学习,发现Scrapy框架真的是一个很好用的框架,接下来让我们用一个简单的例子,来见识一下Scrapy框架的强大之处.
本示例将获取新浪微博指定用户下的所有基本信息,粉丝和关注者,并且通过该用户的关注和粉丝继续深度爬出,简单来说,只要时间够多,ip够用,通过一个用户就可以得到新浪微博所有用户的基础信息
创建项目
scrapy startproject weibospider
目录层级如下:
weibospider
-weibospider
-spiders # 爬虫目录,创建爬虫文件
-__init__.py
_weibo.py # 写入爬虫相关信息
__init__.py
items.py # 设置数据存储模板,用于结构化数据,如Django中的models
middlewares.py # 设置中间下载键 可以设置请求头和IP池
pipelines.py # 一般结构化的数据持久化
setting.py # 爬虫运行的相关设置
main.py # 设置快捷启动
scrapy.cfg # 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息,主要的配置信息在setting.py中
爬取用户信息
import scrapy
from scrapy import Request
import json
from weibospider.items import UserItem, UserRelationItem
class WeiBoUserInfoSpider(scrapy.Spider):
name = 'weibo'
user_urls = 'https://m.weibo.cn/api/container/getIndex?uid={uid}type=uid&value={uid}&containerid=100505{uid}'
followers_urls = 'https://m.weibo.cn/api/container/getIndex?containerid=231051_-_followers_-_{uid}&page={page}'
fans_urls = 'https://m.weibo.cn/api/container/getIndex?containerid=231051_-_fans_-_{uid}&since_id={since_id}'
uid_lists = [
'1767840980',
'1582188504',
'1759006061',
'3908615569'
]
def start_requests(self):
for uid in uid_lists:
yield Request(self.user_urls.format(uid=uid), callback=self.parse_user)
def