步骤
1.创建item,怎么确定scrapy.Field()的命名方式?
解决方法:谷歌浏览器,右键-查看网页源代码,在源代码中ctrl+f搜索对应关键字,确定到知乎对应的命名方式。
2.怎么爬取用户信息?
个人信息页
可以看到网页查看详细信息需要ajax加载,对应四种解决方法:
python 爬取 '展开全文' 思路(ajax) - 简书
因为抓包到的post请求被加密,无法通过模拟浏览器发送post获取信息。用selenium效率略低。用re出现了一个问题,文本中有unicode乱码,而在scrapy.Request()里面加参数encoding='utf8'并不管用。
所以本次采用json.loads()方法解析:
import json
r = json.loads(response.text , encoding='utf8')
#json.loads()的作用是将字符串类型转化为字典类型,然后一层一层得提取相应的数据。
3.怎么拓扑关系爬全网?
知乎-检查
显而易见following的列表存放在每一个div[@class="List-item"]里,其主页链接在div下的a[@class="UserLink-link"]里,但是实际测试出现了一个问题:只返回了6个重复href,其中3个有效href。
因为1.每页response只返回3个链接,
2. 存储链接的json文件中,链接被加密
网页中没有完整url,所以不能用rule
4. 传参page=1,page=2...被scrapy查重报错301
被scrapy自动去重,同一个网页page=1,page=2...判定为重复
初步 解决方法:重新定义并使用redis去重