Python数据收集入门

工作需要,临时学习一下Python,记录一些学习资料和经验

python3语言入门

菜鸟教程

python3环境

Windows Python3 安装
VSCode扩展

爬虫快速入门

第一步:Get获取网页html

第二步:根据html界面规则,定位提取自己想要的数据

入门实战:使用requests和beautifulsoup4从小说网站爬取并保存小说

需要安装的库:

python库作用cmd安装命令文档
requests发送网络HTTP请求pip install requestsdocs
beautifulsoup4从HTML或XML文件中提取数据pip install beautifulsoup4docs

进阶实战项目

爬虫框架scrapy

中文文档

方便快捷的爬虫框架,复杂的爬虫规则可能不适用。

cmd安装命令:pip install scrapy

scrapy主要命令

主要命令cmdline备注
创建项目scrapy startproject [exampleproject]
创建爬虫scrapy genspider [examplespider] [“example.com”]settings.py所在目录下执行
执行爬虫scrapy crawl [examplespider]scrapy.cfg所在目录下执行

scrapy实战

scrapy实战:使用scrapy爬取电影网站数据

  1. 创建scrapy项目
    scrapy startproject MovieSpider
  2. 创建爬虫spider
    cd MovieSpider
    scrapy genspider job_position “ygdy8.net”
    job_position是爬虫名,后面运行爬虫时会用到,ygdy8.net是爬取的域范围
MovieSpider
  ├── MovieSpider
  │   ├── __init__.py
  │   ├── items.py
  │   ├── middlewares.py
  │   ├── pipelines.py
  │   ├── __pycache__
  │   ├── settings.py
  │   └── spiders
  │       ├── __init__.py
  │       └── __pycache__
  │       └── job_position.py
  └── scrapy.cfg
路径说明
scrapy.cfg项目的总配置文件,通常无须修改。
MovieSpider项目的 Python 模块,程序将从此处导入 Python 代码。
MovieSpider/items.py用于定义项目用到的 Item 类。Item 类就是一个 DTO(数据传输对象),通常就是定义 N 个属性,该类需要由开发者来定义。
MovieSpider/middlewares.py中间件文件,hook爬虫流程一些步骤,如输出数据前过滤掉不想要的数据、或过滤掉失败的请求处理。
MovieSpider/pipelines.py项目的管道文件,它负责处理爬取到的信息。该文件需要由开发者编写。
MovieSpider/settings.py项目的配置文件,在该文件中进行项目相关配置。如默认请求头、管道等。
MovieSpider/spiders在该目录下存放项目所需的蜘蛛,蜘蛛负责抓取项目感兴趣的信息。
MovieSpider/spiders/job_position.py开发者定义的蜘蛛,开发者在这里设置请求地址和解析数据的规则。
  1. Item.py定义属性
import scrapy

class MoviespiderItem(scrapy.Item):
    #电影名
    name = scrapy.Field()
    #uri
    uri = scrapy.Field()
  1. 编写spider类
import scrapy
from MovieSpider.items import MoviespiderItem
#注意在上面导入MoviespiderItem包
class JobPositionSpider(scrapy.Spider):
    name = 'job_position'
    allowed_domains = ['ygdy8.net']
    #这里写上你要爬取的页面
    start_urls = ['https://www.ygdy8.net/html/gndy/china/index.html']

	#爬取的方法
    def parse(self, response):
        
        item =  MoviespiderItem()
        #匹配
        for jobs_primary in response.xpath('//table[@class="tbspan"]'):
            item['name'] = jobs_primary.xpath ('./tr/td/b/a[2]/text()').extract()
            item['uri']  = jobs_primary.xpath ('./tr/td/b/a[2]/@href').extract()
            #不能使用return 
            yield item
  1. pipelines.py处理Item输出
class  MoviespiderPipeline(object):
    def process_item(self, item, spider):
        print("name:",item['name'])
        print("url:",item['url']) #这里就打印出来
  1. 修改settings.py文件
 BOT_NAME = 'MovieSpider'
 SPIDER_MODULES = ['MovieSpider.spiders']
 NEWSPIDER_MODULE = 'MovieSpider.spiders'
 ROBOTSTXT_OBEY = True
# 配置默认的请求头 User-Agent与浏览器一致
DEFAULT_REQUEST_HEADERS = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
# 配置使用Pipeline 后面的数字是优先级从低到高
ITEM_PIPELINES = {
     'MovieSpider.pipelines.MoviespiderPipeline': 300,
}
  1. 运行spider
    scrapy crawl job_position

PS:入门实战的例子适用于对静态网页收集数据,动态网页看下一篇。

其他

python文件运行scrapy命令

scrapy.cfg所在目录下添加main.py

from scrapy import cmdline

#导入cmdline模块,可以实现控制终端命令行。
import os  # 用来设置路径

# 获取当前脚本路径
dirpath = os.path.dirname(os.path.abspath(__file__))

#切换工作目录
os.chdir(dirpath)

cmdline.execute('scrapy crawl job_position'.split())

scrapy.xpath

XPath教程

https://blog.csdn.net/qq_27283619/article/details/88704479

scrapy输出到mongoDB

安装:pip install pymongo
添加输出到mongodb的管道
pipelines.py

from itemadapter import ItemAdapter
import pymongo
from scrapy.utils.project import get_project_settings 
#获取settings.py文件中的数据需要导入这个

class FirstspiderMongo:
  
    def __init__(self):
        settings = get_project_settings()
        self.mongo_uri = settings['MONGO_HOST']
        self.mongo_db = settings['MONGO_DB']
        self.mongo_port = settings['MONGO_PORT']
        self.mongo_collection = settings['MONGO_COLL']

    @classmethod
    def from_crawler(cls, crawler):
        return cls()

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri,port=self.mongo_port)
        self.db = self.client[self.mongo_db]

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

    def process_item(self, item, spider):
        self.db[self.mongo_collection].insert_one(ItemAdapter(item).asdict())
        return item
    #记得将这个管道添加的settings.py中

网络爬虫常用库

https://zhuanlan.zhihu.com/p/81944559

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值