0
点赞
收藏
分享

微信扫一扫

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


确定要爬取的网站及内容

​​笑话大全网站中的冷笑话​​,如下

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


要采集的字段,有标题,来源、正文内容

创建scrapy项目

步骤一、启动爬虫项目

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

scrapy startproject jokes

创建完成后,选择进入创建好的文件夹下,输入cd jokes,如下

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


经过上面语句的输入,可以看到文件夹下多出一些文件(左侧就是该文件多出来的内容)

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


步骤二、创建一个joke爬虫模板

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

scrapy genspider joke xiaohua.zol.com.cn

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


这时候会在spider文件夹下面多出一个joke.py的文件,如下

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

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

start_urls的列表装的就是我们要爬取的具体的网址,可以进行修改,比如这里我们进行笑话大全前两页的爬取,就可以直接把这两页的url放在列表中,然后尝试查看创建的这个爬虫模板是否能正常运行,修改完成后进行保存,如下

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


这时候就可以直接在powershell窗口执行这个爬虫了,输入代码指令如下

scrapy crawl joke

输出结果如下:(不出意外的话会显示505报错)

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

★★★★★问题解决

打开setting.py文件,需要对里面的参数进行修改,总共修改三处,针对产生的具体的505错误,添加信任指令,并设置请求头和不遵守robost协议(可以对比本博客的第三张图进行修改),如下:

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


修改之后保存,然后再在powershell窗口运行刚刚的指令(只需要按一下键盘上的up键,也就是上下左右键的上键,刚刚的指令就出来了),运行结果如下(200代表着数据可以正常访问)

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

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

1) 标题,对应的标签信息如下

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


2) 来源,对应的标签信息如下

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


3)正文内容,对应的标签信息如下

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

标签中内容的获取

打开创建的爬虫模板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)

输出的结果为:

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

将爬取的内容存到本地

整个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文本,内容如下

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

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


举报

相关推荐

0 条评论