【python实现网络爬虫(7)】scrapy爬取笑话大全网站全过程(505问题的解决)

确定要爬取的网站及内容

笑话大全网站中的冷笑话,如下
在这里插入图片描述
要采集的字段,有标题,来源、正文内容

创建scrapy项目

步骤一、启动爬虫项目

在某处(比如桌面)创建一个名称为“scrapy爬取笑话大全”新的文件夹,然后进入该文件夹中空白位置同时点击shift+鼠标右键,在弹出的窗口中选择“在此处打开powershell窗口”,然后输入如下代码指令(代表创建一个名为jokes的项目爬虫)

scrapy startproject jokes

创建完成后,选择进入创建好的文件夹下,输入cd jokes,如下
在这里插入图片描述
经过上面语句的输入,可以看到文件夹下多出一些文件(左侧就是该文件多出来的内容)
在这里插入图片描述
步骤二、创建一个joke爬虫模板

在刚刚进入的路径下面输入如下代码指令

scrapy genspider joke xiaohua.zol.com.cn

在这里插入图片描述
这时候会在spider文件夹下面多出一个joke.py的文件,如下
在这里插入图片描述

步骤三、进行爬取网址的修改

start_urls的列表装的就是我们要爬取的具体的网址,可以进行修改,比如这里我们进行笑话大全前两页的爬取,就可以直接把这两页的url放在列表中,然后尝试查看创建的这个爬虫模板是否能正常运行,修改完成后进行保存,如下
在这里插入图片描述
这时候就可以直接在powershell窗口执行这个爬虫了,输入代码指令如下

scrapy crawl joke

输出结果如下:(不出意外的话会显示505报错)
在这里插入图片描述

★★★★★问题解决

打开setting.py文件,需要对里面的参数进行修改,总共修改三处,针对产生的具体的505错误,添加信任指令,并设置请求头和不遵守robost协议(可以对比本博客的第三张图进行修改),如下:
在这里插入图片描述
修改之后保存,然后再在powershell窗口运行刚刚的指令(只需要按一下键盘上的up键,也就是上下左右键的上键,刚刚的指令就出来了),运行结果如下(200代表着数据可以正常访问)
在这里插入图片描述

步骤四、查找要爬取数据的对应标签

1) 标题,对应的标签信息如下
在这里插入图片描述
2) 来源,对应的标签信息如下
在这里插入图片描述
3)正文内容,对应的标签信息如下
在这里插入图片描述

标签中内容的获取

打开创建的爬虫模板joke.py,在parse函数下面编写爬取内容的代码如下:(这里使用xpath进行定位,在定位的标签上右键copy然后选择copy XPath,将内容粘贴到下面的括号内即可)

for i in range(1,21):
	title = response.xpath(f"//ul/li[{i}]/span[2]/a/text()").extract()
	source = response.xpath(f"//ul/li[{i}]/div[1]/span[2]/text()").extract()
	content = response.xpath(f"//ul/li[{i}]/div[2]/p/text()").extract()
	print('title:\n',title) 
	print('source:\n',source) 
	print('content:\n',content)

输出的结果为:
在这里插入图片描述

将爬取的内容存到本地

整个joke.py的文件内容如下,这时候在powershell窗口运行scrapy

# -*- coding: utf-8 -*-
import scrapy


class JokeSpider(scrapy.Spider):
	name = 'joke'
	allowed_domains = ['xiaohua.zol.com.cn']
	start_urls = ['http://xiaohua.zol.com.cn/lengxiaohua/1.html',
	'http://xiaohua.zol.com.cn/lengxiaohua/2.html']

	def parse(self, response):
		page = response.url[-6]
		file_name = "jokes-{}.txt".format(page)
		with open(file_name,'w') as f:
			for i in range(1,21):
				title = response.xpath(f"//ul/li[{i}]/span[2]/a/text()").extract()
				source = response.xpath(f"//ul/li[{i}]/div[1]/span[2]/text()").extract()
				content = response.xpath(f"//ul/li[{i}]/div[2]/p/text()").extract()
				print('title:\n',title) 
				print('source:\n',source) 
				print('content:\n',content) 
				f.write('title:{}\n source:{}\n content:{}\n'.format(title,source,content))

最后会在jokes文件夹下生成两个txt文本,内容如下

在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值