准备工作
基础环境准备
- win10
- pycharm
- python3(同时保证有pip环境)
scrapy环境准备
-
打开网址
https://www.lfd.uci.edu/~gohlke/pythonlibs/
- 下载Twisted(按python版本+系统位数对应)(浏览器下ctrl+f直接搜索)
- 下载scrapy (截止本文撰写,当前版本是:Scrapy-1.6.0-py2.py3-NONE-any.whl)(不区分系统和python版本)
- 准备好这两个whl文件(我习惯在桌面建个临时文件夹,然后把他俩扔进去)
- 安装whl:在文件夹下按住shift 然后点击右键,选择在此处打开powershell。
-
执行命令
pip install teisted文件名
-
执行命令
pip install scrapy文件名
-
等待安装完成后 执行命令
pip list
查看已经安装的python包中是否有上面两个模块,正常的话都有了。 - 如图,安装成功
pycharm创建一个scrapy项目
创建一个项目
../demodemo/ # 爬虫项目
demodemo/ # 爬虫文件夹
__init__.py # 必须存在
items.py # 字段 可以写需要爬取对象的类
middlewares.py #中间件
pipelines.py # 管道文件
settings.py # 爬取配置
spiders/ # 开发位置
scrapy.cfg # 项目配置
写一个DEMO
- 在terminal中通过cd命令进入到spiders文件夹
-
执行命令
scrapy genspider 爬虫名 爬虫域
- 在我的demo中:``````(对应的是 随便找了一个段子网站:https://ishuo.cn/ )
- 编辑items.py
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
#
# import scrapy
#
#
# class DemodemoItem(scrapy.Item):
# # define the fields for your item here like:
# # name = scrapy.Field()
# pass
import
scrapy
class
DuanZiItem
(
scrapy
.
Item
)
:
# 作者
author
=
scrapy
.
Field
(
)
# 内容
word
=
scrapy
.
Field
(
)
- 编辑spiders/Duanzi.py
# -*- coding: utf-8 -*-
# import scrapy
#
#
# class DuanziSpider(scrapy.Spider):
# name = 'Duanzi'
# allowed_domains = ['ishuo.cn']
# start_urls = ['http://ishuo.cn/']
#
# def parse(self, response):
# pass
# -*- coding: utf-8 -*-
import
scrapy
from
demodemo
.
items
import
DuanZiItem
class
DemospiderSpider
(
scrapy
.
Spider
)
:
# 爬虫名称
name
=
'duanzi'
# 爬虫域
allowed_domains
=
[
'ishuo.cn'
]
# 爬虫地址
start_urls
=
[
'http://ishuo.cn/'
]
# 处理回复
def
parse
(
self
,
response
)
:
data_list
=
[
]
text_list
=
response
.
xpath
(
"//div[@id=\"list\"]/ul/li"
)
for
item
in
text_list
:
word
=
item
.
xpath
(
'./div[@class=\"content\"]/text()'
)
.
extract
(
)
[
0
]
author
=
item
.
xpath
(
'./div[@class="info"]/a/text()'
)
.
extract
(
)
[
0
]
ddata
=
DuanZiItem
(
)
ddata
[
'author'
]
=
author
ddata
[
'word'
]
=
word
data_list
.
append
(
ddata
)
pass
# print(data_list)
with
open
(
"demo.txt"
,
"w"
,
encoding
=
"utf-8"
)
as
f
:
f
.
write
(
str
(
data_list
)
)
-
编辑setting.py
修改一个值
ROBOTSTXT_OBEY
=
False
添加一个请求头
DEFAULT_REQUEST_HEADERS
=
{
"user-agent"
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
,
'Accept'
:
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
,
# 'Accept-Language': 'en',
}
-
注意:这句话会报错
from demodemo.items import DuanZiItem
是因为本地包路径的问题
解决方案:选中项目名
(是scrapy项目名:demodemo 不是pycharm项目名demo)
右键
运行scrapy
执行命令:
scrapy crawl duanzi
即可看到一个txt文件
如何让pycharm运行scrapy
-
编写一个脚本
放到项目根目录(与.cfg同目录)
start.py
# -*- coding:utf-8 -*-
from
scrapy
import
cmdline
cmdline
.
execute
(
"scrapy crawl duanzi"
.
split
(
)
)
3.
4.选择刚才的start.py 并给这个脚本起个名字
apply
【完】
欢迎关注我的微信公众号:并非一无所有