python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL

一、先在MySQL中创建test数据库,和相应的site数据表

二、创建Scrapy工程

#scrapy startproject 工程名
scrapy startproject demo4

三、进入工程目录,根据爬虫模板生成爬虫文件

#scrapy genspider -l # 查看可用模板
#scrapy genspider -t 模板名 爬虫文件名 允许的域名
scrapy genspider -t crawl test sohu.com

四、设置IP池或用户代理(middlewares.py文件)

 1 # -*- coding: utf-8 -*-
 2 # 导入随机模块
 3 import random
 4 # 导入有关IP池有关的模块
 5 from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware
 6 # 导入有关用户代理有关的模块
 7 from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
 8
 9 # IP池
10 class HTTPPROXY(HttpProxyMiddleware):
11     # 初始化 注意一定是 ip=‘‘
12     def __init__(self, ip=‘‘):
13         self.ip = ip
14
15     def process_request(self, request, spider):
16         item = random.choice(IPPOOL)
17         try:
18             print("当前的IP是:"+item["ipaddr"])
19             request.meta["proxy"] = "http://"+item["ipaddr"]
20         except Exception as e:
21             print(e)
22             pass
23
24
25 # 设置IP池
26 IPPOOL = [
27     {"ipaddr": "182.117.102.10:8118"},
28     {"ipaddr": "121.31.102.215:8123"},
29     {"ipaddr": "1222.94.128.49:8118"}
30 ]
31
32
33 # 用户代理
34 class USERAGENT(UserAgentMiddleware):
35     #初始化 注意一定是 user_agent=‘‘
36     def __init__(self, user_agent=‘‘):
37         self.user_agent = user_agent
38
39     def process_request(self, request, spider):
40         item = random.choice(UPPOOL)
41         try:
42             print("当前的User-Agent是:"+item)
43             request.headers.setdefault(‘User-Agent‘, item)
44         except Exception as e:
45             print(e)
46             pass
47
48
49 # 设置用户代理池
50 UPPOOL = [
51     "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
52 ]

五、settngs.py配置

 1 COOKIES_ENABLED = False
 2
 3 DOWNLOADER_MIDDLEWARES = {
 4     # ‘scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware‘:123,
 5     # ‘demo4.middlewares.HTTPPROXY‘ : 125,
 6     ‘scrapy.downloadermiddlewares.useragent.UserAgentMiddleware‘: 2,
 7     ‘demo4.middlewares.USERAGENT‘: 1
 8 }
 9
10 ITEM_PIPELINES = {
11     ‘demo4.pipelines.Demo4Pipeline‘: 300,
12 }

六、定义爬取关注的数据(items.py文件)

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 # Define here the models for your scraped items
 4 #
 5 # See documentation in:
 6 # http://doc.scrapy.org/en/latest/topics/items.html
 7
 8 class Demo4Item(scrapy.Item):
 9     name = scrapy.Field()
10     link = scrapy.Field()

七、爬虫文件编写(test.py)

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from scrapy.linkextractors import LinkExtractor
 4 from scrapy.spiders import CrawlSpider, Rule
 5 from demo4.items import Demo4Item
 6
 7 class TestSpider(CrawlSpider):
 8     name = ‘test‘
 9     allowed_domains = [‘sohu.com‘]
10     start_urls = [‘http://www.sohu.com/‘]
11
12     rules = (
13         Rule(LinkExtractor(allow=(‘http://news.sohu.com‘), allow_domains=(‘sohu.com‘)), callback=‘parse_item‘,
14              follow=False),
15         # Rule(LinkExtractor(allow=(‘.*?/n.*?shtml‘),allow_domains=(‘sohu.com‘)), callback=‘parse_item‘, follow=False),
16     )
17
18     def parse_item(self, response):
19         i = Demo4Item()
20         i[‘name‘] = response.xpath(‘//div[@class="news"]/h1/a/text()‘).extract()
21         i[‘link‘] = response.xpath(‘//div[@class="news"]/h1/a/@href‘).extract()
22         #i[‘description‘] = response.xpath(‘//div[@id="description"]‘).extract()
23         return i

八、管道文件编写(pipelines.py)

 1 # -*- coding: utf-8 -*-
 2 import pymysql
 3 import json
 4 # Define your item pipelines here
 5 #
 6 # Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
 7 # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
 8
 9
10 class Demo4Pipeline(object):
11     def __init__(self):
12         # 数据库连接
13         self.conn = pymysql.connect(host=‘localhost‘, user=‘root‘, password=‘123456‘, database=‘chapter17‘, charset=‘utf8‘)
14         self.cur = self.conn.cursor()
15
16     def process_item(self, item, spider):
17         # 排除空值
18         for j in range(0, len(item["name"])):
19             nam = item["name"][j]
20             lin = item["link"][j]
21             print(type(nam))
22             print(type(lin))
23             # 注意参数化编写
24             sql = "insert into site(name,link) values(%s,%s)"
25             self.cur.execute(sql,(nam,lin))
26             self.conn.commit()
27         return item
28     def close_spider(self, spider):
29         self.cur.close()
30         self.conn.close()

九、总结

1.注意在测试完数据库正常运行时,再开始写入数据,当然,在sql参数化处理的过程中,注意格式,千万不要弄错了

时间: 2024-07-28 16:38:47

python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL的相关文章

scrapy中使用代理IP爬取数据时遇到IP失效时自动切换的方法

当使用临时的IP请求数据时,由于这些IP的过期时间极短,通常在1分钟~5分钟左右,这时scrapy就会报发以下错误 2020-01-17 17:00:48 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://xxxx/co s): Connection was refused by other side: 10061: 由于目标计算机积极拒绝,无法连接.. 这时如何自动切换IP,然后重新请求呢? 先看看scrapy的

python框架Scrapy报错TypeError: &#39;float&#39; object is not iterable解决

原因是:Twisted版本高了. 解决办法: 只要把Twisted库降级到16.6.0即可: 1 pip3 install Twisted==16.6.0 2 3 注:Twisted16.6.0安装后,会自动卸载高版本的Twisted python框架Scrapy报错TypeError: 'float' object is not iterable解决

(原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻

发现科大网页的源码中还有文章的点击率,何不做一个文章点击率的降序排行.简单,前面入门(1)基本已经完成我们所要的功能了,本篇我们仅仅需要添加:一个通过正则获取文章点击率的数字:再加一个根据该数字的插入排序.ok,大功告成! 简单说一下本文插入排序的第一个循环,找到列表中最大的数,放到列表 0 的位置做观察哨. 上代码: # -*- coding: utf-8 -*- # 程序:爬取点击排名前十的科大热点新闻 # 版本:0.1 # 时间:2014.06.30 # 语言:python 2.7 #--

[python爬虫] Selenium爬取内容并存储至MySQL数据库

前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息.通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的.这篇文章主要讲述通过Selenium爬取我的个人博客信息,然后存储在数据库MySQL中,以便对数据进行分析,比如分析哪个时间段发表的博客多.结合WordCloud分析文章的主题.文章阅读量排名等.        这是一篇基础性的文章,希望对您有所帮助,如果文章中出现错误或不足之处,还请海涵.下一篇文章会简单讲解数据分析的过程. 一.

Scrapy 通过登录的方式爬取豆瓣影评数据

Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来比较简单,主要分为以下几步: 1.创建一个项目 ==scrapy startproject Douban 得到一个项目目录如下: ├── Douban │   ├── init.py │   ├── items.py │   ├── pipelines.py │   ├── settings.py

爬虫学习 Python网络爬虫第三弹《爬取get请求的页面数据》

爬虫学习 Python网络爬虫第三弹<爬取get请求的页面数据> 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib.parse,在Python2中是urllib和urllib2. 二.由易到难的爬虫程序: 1.爬取百度首页面所有数据值 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #导包 4

爬虫案例—中基协数据爬取

因为工作原因,需要爬取相关网站的数据,包括中基协网站和天眼查部分数据. 一.中基协网站 爬取思路: 1.查看目标页:http://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.9775162173180119&page=%s&size=50 发现有随机数字串(刷新反爬措施),以及页码和每页信息条数,可以用来拼接爬取url 用一个循环爬取所有展示页面,用到requests库以及random函数生成随机数 返回的是json数据,直接用r

Scrapy和MongoDB的应用---爬取

Scrapy是Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取Web站点并从页面中提取结构化的数据.它最吸引人的地方在于任何人都可以根据需求方便的修改. MongoDB是现下非常流行的开源的非关系型数据库(NoSql),它是以“key-value”的形式存储数据的,在大数据量.高并发.弱事务方面都有很大的优势. 当Scrapy与MongoDB两者相碰撞会产生怎样的火花呢?与MongoDB两者相碰撞会产生怎样的火花呢?现在让我们做一个简单的爬取小说的TEST 1.安装Scra

Scrapy教程——搭建环境、创建项目、爬取内容、保存文件

1.创建项目 在开始爬取之前,您必须创建一个新的Scrapy项目.进入您打算存储代码的目录中,运行新建命令. 例如,我需要在D:\00Coding\Python\scrapy目录下存放该项目,打开命令窗口,进入该目录,执行以下命令: scrapy startproject  tutorial PS:tutorial可以替换成任何你喜欢的名称,最好是英文 该命令将会创建包含下列内容的 tutorial 目录: tutorial/ scrapy.cfg tutorial/ __init__.py i