1. 新建项目
① 新建工作文件夹,此处在D盘新建“爬虫练习”
② 新建pycharm项目,记得文件位置选择“爬虫练习”,勾选无需main文件
③ 配置环境,用anacoda方便一点
#创建环境(创建python版本为3.8、名字为env_name的虚拟环境)
conda create -n env_name python=3.8
#列出所有环境
conda env list
conda info -e
conda info --envs
#激活环境
conda activate env_name
#列出改环境下的所有包
conda list
#查询某个包下载没
conda list pkgname
conda list pkgname* (模糊查询)
#安装/卸载包
conda install package_name
conda uninstall package_name
#清理缓存
conda clean -p # 删除没有用的包 --packages
conda clean -t # 删除tar打包 --tarballs
conda clean -y -all # 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包)
#退出环境
conda activate
conda deactivate
#删除环境
(将该指定虚拟环境及其中所安装的包都删除)
conda remove --name env_name --all
(只删除虚拟环境中的某个或者某些包)
conda remove --name env_name package_name
#导出环境
(获得环境中的所有配置)
conda env export --name myenv > myenv.yml
(重新还原环境)
conda env create -f myenv.yml
④ 安装scrapy
常规pip一般下载不下来,可以采用 ↓ ,或者其他网上教程的安装方法。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scrapy
2. 新建爬虫项目
① 在终端新建项目
scrapy startproject pc
#在当前工作文件夹,新建项目,并命名为pc
cd pc
#进入到pc项目下工作
#创建scrapy爬虫(注意:爬虫名字"域名"不能和项目名称一致)
scrapy genspider + 爬虫名字 + 对应的网址链接去掉http,举例↓
scrapy genspider pachong guba.eastmoney.com
__init__.py #项目的初始化文件,包含项目的初始化信息
items.py #爬虫项目的数据容器文件,主要来定义我们所要获取的数据。
middlewares.py #用来存放各种中间件的文件
pipelines.py #爬虫项目的管道文件,主要用来对items里面定义的数据进行进一步的加工
settings.py #爬虫项目的设置文件
② 在settings里面设置”浏览器标识“
打开想要爬虫的网页——打开开发者界面——选择网络——选择全部——选择第一个链接点击进入——下滑到最后找到User-Agent
同时记得把ROBOTSTXT_OBEY,改为False。
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = "......具体浏览器请求头"
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
③ 在items里面设置要获取什么
取消注释或者设置其他目标
import scrapy
class AdicrawlerItem(scrapy.Item):
author = scrapy.Field()
theme = scrapy.Field()
# 以上定义了两个变量 分别是作者名、主题。
3. 编辑爬虫文件
① 找到新建的项目,一般为爬虫名称.py,然后开始编辑
import scrapy
from ..items import PachongItem
#手动新增调用,记得是自己项目的名字加上Item,和items文件里面保持一致
class PcSpider(scrapy.Spider):
name = "pc"
allowed_domains = ["guba.eastmoney.com"]
start_urls = ["https://guba.eastmoney.com"]
# 获取我们想要网站首页的地址,新建爬虫项目后会自动填充
def parse(self, response):
item=PachongItem()
# PachongItem是自己的爬虫项目名称
li_list=response.xpath("//*[@id='mainlist']/div/div/div[3]/ul/li[1]/div/ul/li")
#设置xpath路径,打开我们想要爬取网站首页的开发者界面,找到第一页第一条新闻标题的元素,将鼠标移动至标题文字处,复制xpath路径,删掉li的剩余部分,说明对整页的li下条目进行循环。可以复制第二条进行对比。
# 需要注意外面是“,那么里面还是”的话会导致无效,需要把链接里面原有的”改为‘,代码就不会标红了
# //*[@id="mainlist"]/div/div/div[3]/ul/li[1]/div/ul/li[2]/div/div/div[1]/a
# //*[@id="mainlist"]/div/div/div[3]/ul/li[1]/div/ul/li[1]/div/div/div[1]/a
# //*[@id="mainlist"]/div/div/div[3]/ul/li[1]/div/ul/li
for li in li_list:
item["name"]=li.xpath("./div/div/div[1]/a/text()").get()
# 设置循环的后缀,即li除了序号之外,后面完全相同的部分。并加上/text(),说明获取文本数据
yield item
② 在终端输入运行指令
# 终端运行代码
# 运行爬虫pc文件,并且结果导入(-o),到文件1.csv中
scrapy crawl pc -o 1.csv
# 如果出现报错
# AttributeError: 'AsyncioSelectorReactor' object has no attribute '_handleSignals'
pip install Twisted==22.10.0rc1
有时运行会报错,可以卸载重装Twisted固定版本
4. 其他注意
①目前只是一个针对简单页面爬虫的demo,不能翻页,不能模拟下滑。
精彩链接
发表评论