#scrapy网络爬虫

安装scrapy并且指定镜像网址

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

windows环境下需要依赖 lxml 和 twisted
需要从 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 从下载相关的 .whl 后缀文件
进入到下载的文件目录

pip install lxml‑4.6.3‑cp38‑cp38‑win_amd64.whl
pip install Twisted‑20.3.0‑cp38‑cp38‑win_amd64.whl

使用命令行 scrapy 创建项目 ArticleSpider

scrapy startproject ArticleSpider # 创建项目

# 在ArticleSpider项目下生成爬虫
cd ArticleSpider # 进入项目目录
scrapy genspider cnblogs[爬虫名称] news.cnblogs.com[域名] # 在项目中生成爬虫

--- 目录结构
ArticleSpider
---- ArticleSpider
      ---- spiders
            ---- __init__.py
            ---- cnblogs.py
      ---- __init__.py
      ---- items.py
      ---- middlewares.py
      ---- pipelines.py
      ---- settings.py
---- scrapy.cfg
# cnblogs.py
import scrapy

class CnblogsSpider(scrapy.Spider):
    name  =  'cnblogs'
    allowed_domains = ['news.blogs.com']
    start_url = ['http://news.cnblogs.com/']

    def parse(self, response):
        pass

pytharm进行debug

# 根目录下新建 main.py
from scrapy.cmdline import execute
execute(['scrapy', 'crawler', 'cnblogs'])

Xpath

'article' 选取所有 article 元素的所有子节点
'/article' 选取根元素 article
'article/a' 选取所有属于 article 的子元素的 a 元素
'//div' 选取所有 div 子元素( 无论出现在文档任何地方 )
'article//div' 选取所有属于 article 元素的后代的 div 元素, 不管它出现在 article 之下的任何位置
'//@class' 选取所有名为 class 的属性

'/article/div[1]' 选取属于article子元素的第一个div元素
'/article/div[last()]' 选取属于article子元素的最后一个div元素
'/article/div[last()-1]' 选取属于 article 子元素的最后第二个div元素
'//div[@lang]' 选取所有lang属性的div元素
'//div[@lang="eng"]' 选取所有属性lang值为eng的div元素

'/div/*' 选取属于div元素的所有子节点
'//*' 选取所有元素
'//div[@*]' 选取所有带属性的div元素
'/div/a | //div/p' 
'//span | //ul' 选取文档中所有的 span 和 ul 元素
'article/div/p | //span' 选取所有article下的div下的p元素 和 文档中的所有span元素

# 函数
'div[contains(@id, "first")]' id是first的div元素
'a[text() = "baidu"]' 文本是baidu的a元素
'div[starts-with(@id, "first")]' id以first开头的div元素
'input[@name="id" and not(contains(@class, "fuck"))]' name属性是id 并且 没有fuck类的input元素
'input[not(@id)]' 不包含id属性的input元素

CSS选择器

'*' 选择所有节点
'#container' 选择id为container的节点
'.container' 选择所有class包含container的节点
'li a' 选取所有li下的所有a节点
'ul + p' 选择ul后面的第一个p元素
'div#container > ul' 选取id为container的div的ul子元素

’p ~ ul' 选择前面有

元素的每个

    元素 'a[title]' 选取所有有title属性的a元素 'a[href="http://jobbole.com"]' 选取所有href属性为 jobbole.com 值的a元素 'a[href*="jobole"]' 选取所有href属性包含 jobbole 的a元素 'a[href^="http"]' 选取所有href属性值以http开头的a元素 'a[href$=".jpg"]' 选取所有href属性值以.jpg结尾的a元素 'input[type=radio]:checked' 选择选中的radio的元素

你可能感兴趣的:(#scrapy网络爬虫)