• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

想学爬虫,看这一篇就够啦!

python 测神 1929次浏览 0个评论

  导读:如何使用scrapy框架实现爬虫?如何提取爬取的数据?如何处理内容?想要了解更多,就让我们一起来看看吧!

 

Scrapy安装(mac)

# 安装
pip install scrapy

注意:不要使用commandlinetools自带的python进行安装,不然可能报架构错误;用brew下载的python进行安装。

新建爬虫

 

# 新建爬虫
scrapy startproject demo

demo为项目名。

确定目标

编写items.py,如添加要爬取的字段,如:

name = scrapy.Field()
age = scrapy.Field()
hobby = scrapy.Field()

制作爬虫

cd demo

# 生成爬虫demo.py
scrapy genspider demo "baidu.com"

我们需要修改demo.py里的start_urls的地址为自己想爬取的地址,如:https://www.cnblogs.com/teark/,还需要修改parse()方法,可暂时改为保存所爬取的页面,如:

# 不加encoding会遇到编码问题with open("goal.html", "w", encoding='utf-8') as f:    f.write(response.text)

一般保存html信息后,该段代码便没有意义了,注释掉即可。

爬取

# 运行爬虫
scrapy crawl demo

运行完会生成goal.html文件,接下来打开文件,进行调试数据。

页面调试

该过程是为了定位元素,确定xpath表达式的值,使用scrapy shell(最好先安装ipython,有语法提示),调试好了再放到代码里,如:

scrapy shell "https://www.cnblogs.com/teark/"
response.xpath('//*[@class="even"]') print site[0].xpath('./td[2]/text()').extract()[0]

提取

提取过程就是实现parse方法,根据保存的网页提取目标数据,一般用xpath表达式,如:

def parse(self, response):
    for _ in response.xpath("//div[@class='teark_article']"):
        item = ItcastItem()
        title = each.xpath("h3/text()").extract()
        content = each.xpath("p/text()").extract()
        item['title'] = title[0]
        item['content'] = content[0]
        yield item

至此,html文件和保存文件的代码已经完成了它的作用,可以删掉,我们可以根据定义的字段直接抓取目标值。

# 保存数据,下格式都行:jsonl,jsonl,csv,xml
scrapy crawl demo -o demo.json

会生成demo.json文件,里面就是我们所需要的数据。

处理内容-pipeline

每次爬取时输出这么长的指令,能不能简单一点呢?可以的,pipline就是用来保存文件的:

from itemadapter import ItemAdapter


class TeacherPipeline:
    def __init__(self):
        self.file = open('teacher.json', 'wb')

    def process_item(self, item, spider):
        content = json.dumps(dict(item), ensure_ascii=False) + "\n"
        # 注意写入的是encode之后的字节,不然会乱码
        self.file.write(content.encode())
        return item

    def close_spider(self, spider):
        self.file.close()

还需要在settings.py中添加ITEM_PIPELINES配置,注意路径,如:

ITEM_PIPELINES = {
  "teacher.pipelines.TeacherPipeline": 300
 }

这时启动爬虫只需要scrapy crawl demo,看看当前目录是否生成demo.json,这样我们输入的指令就简单一点了。

 

简记

创建-外:scrapy startproject mySpider

生成-内:scrapy genspider name “url”

执行-外:scrapy crawl <内的自动生成的文件>

保存-外:scrapy crawl itcast -o teachers.json(jsonl, scv, xml)


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明想学爬虫,看这一篇就够啦!
喜欢 (0)

您必须 登录 才能发表评论!

加载中……