Scrapy爬取第一个网站-伯乐在线

分析网站结构

爬取blog.jobbole.com

该网站提供了所有文章的URL


新建虚拟环境(指定虚拟环境)

mkvirtualenv --python=路径 虚拟环境名字


安装scrapy(使用豆瓣源)

workon 虚拟环境名,进入虚拟环境后

pip install -i https://pypi.douban.com/simple/ scrapy


新建Scrapy工程

scrapy startproject 项目名


利用模板新建爬虫文件

在项目目录下

scrapy genspider jobbole blog.jobbole.com

继承了scrapy.Spider类,start_urls是一个list,可以放入想爬取的所有的URL。

对start_urls 进行遍历,yield Request交给Scrapy的下载器,下载完之后,进入到parse函数中,有一个response对象。


自定义main文件调用命令行使pycharm可以调试

os.path.abspath(__file__)  # 得到当前文件的绝对路径

os.path.dirname(os.path.abspath(__file__))    # 得到当前文件的父目录

sys.path.append(os.path.dirname(os.path.abspath(__file__)))

execute(["scrapy","crawl","jobbole"]) # 启动jobbole爬虫

注意settings.py 的ROBOTSTXT_OBEY协议设置为False


出现错误:No module named 'win32api'

因为windows下缺少这个包,通过pip命令安装

pip install -i 豆瓣源 pypiwin32


通过xpath提取值

xpath使用路径表达式在xml和html中进行导航

xpath语法

1. article:选取所有article元素的所有子节点

2. /article:选取根元素article

3. article/a: 属于article的子元素的a元素

4. //div: 获取所有div

5. article//div: article下的所有div

6. //@class: 选取所有名为class的属性

/article/div[1]

/article/div[last()]

//div[@lang='eng'] 取lang属性为eng的div

/div/* div下的所有子节点

//* 选取所有元素

//div[@*] 选取所有带属性的元素

response.xpath('//*[@id="post-110287"]/div[1]/h1/text')  # xpath提取标题

response.xpath('//span[contains(@class,'vote-post-up')]') # 找一个span,他的class包含vote-post-up


通过CSS选择器提取值

response.css('.entry-header h1::text').extract()


关键代码

from scrapy.http import Request

from urllib import parse # python2 中是urlparse



Item


Scrapy 自动下载图片pipeline设置


no module PIL报错:

pip install pillow


将数据作为json文件保存



将数据插入数据库中

安装mysql驱动:pip install mysqlclient





你可能感兴趣的:(Scrapy爬取第一个网站-伯乐在线)