python-scrapy简单爬虫实现
cmd模式下
1.建立工程文件:scrapy startproject xici ###xici为自定义名称
2.进入爬虫工程文件:cd xici # 进入xici工程文件
3.建立爬虫: scrapy genspider ips xici.com #爬虫名称自定义为 ips, xici.com为所需要爬的网页(可以在代码中修改)
4.打开创建的爬虫工程文件,进入爬虫目录下:
5.打开middlewares.py,设置user_agent,代码如下:(直接复制粘贴到middlewares.py中,其他的代码别动),该代码来自:http://blog.csdn.net/liyuetao680/article/details/48501481
1 import random 2 from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware 3 4 class RotateUserAgentMiddleware(UserAgentMiddleware): 5 def __init__(self, user_agent=''): 6 self.user_agent = user_agent 7 8 def process_request(self, request, spider): 9 ua = random.choice(self.user_agent_list) 10 if ua: 11 print(ua, '-----------------yyyyyyyyyyyyyyyyyyyyyyyyy') 12 request.headers.setdefault('User-Agent', ua) 13 14 #the default user_agent_list composes chrome,I E,firefox,Mozilla,opera,netscape 15 #for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php 16 user_agent_list = [ 17 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", 18 "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", 19 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", 20 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", 21 "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", 22 "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", 23 "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", 24 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", 25 "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", 26 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", 27 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", 28 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", 29 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", 30 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", 31 "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", 32 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", 33 "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", 34 "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" 35 ]
6.middlewares.py设置好后,别忘了去setting.py中激活:
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, 'xici.middlewares.RotateUserAgentMiddleware':400, } ##上面代码中的xici是我的爬虫名称,需要改成自己的。
7.代理IP设置,该代码来自(http://blog.csdn.net/u011781521/article/details/70194744?locationNum=4&fps=1)
在setting.py中添加:
IPPOOL=[ {"ipaddr":"61.129.70.131:8080"}, {"ipaddr":"61.152.81.193:9100"}, {"ipaddr":"120.204.85.29:3128"}, {"ipaddr":"219.228.126.86:8123"}, {"ipaddr":"61.152.81.193:9100"}, {"ipaddr":"218.82.33.225:53853"}, {"ipaddr":"223.167.190.17:42789"}
] #代理IP需要自己去爬取或粘贴复制
在middlewar.py中:
from fj_gov.settings import IPPOOL #这里的fj_gov是爬虫工程文件夹名称
还是在middlewar.py中,在class FjGovSpiderMiddleware(object):类中添加: ##这个类是自动创建的,FJGOV也是工程文件名
def __init__(self,ip=''): self.ip=ip def process_request(self, request, spider): thisip=random.choice(IPPOOL) print("this is ip:"+thisip["ipaddr"]) request.meta["proxy"]="http://"+thisip["ipaddr"]
回到settings中,在DOWNLOADER_MIDDLEWARES 中添加:
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware':543, 'fj_gov.middlewares.FjGovSpiderMiddleware':125 ##这里的fj_gov.middlewares和FJGOV..都需要改成自己middlewar中的名称
到这里,代理IP设置完成了!
8.设置items.py: items就简单多了,自定义名称=scrapy.Field()就搞定了
1 class FjGovItem(scrapy.Item): 2 # define the fields for your item here like: 3 # name = scrapy.Field() 4 id=scrapy.Field() 5 title=scrapy.Field() 6 a_content=scrapy.Field() 7 department=scrapy.Field() 8 a_time=scrapy.Field() 9 con_person=scrapy.Field() 10 r_content=scrapy.Field() 11 r_time=scrapy.Field() 12
9.单网页爬虫编写(单网页爬取,其基本逻辑是:建立链接库,然后一个个爬):
1 # -*- coding: utf-8 -*- 2 import scrapy 3 from fj_gov.items import FjGovItem ##易错,注意修改名称 4 5 class FjSpider(scrapy.Spider): 6 name = 'fj' 7 allowed_domains = ['fz123465.fuzhou.gov.cn'] 8 start_urls = ['http://fz12345.fuzhou.gov.cn/'] 9 def start_requests(self): 10 reqs=[] 11 for y in range(13,14):# %02d(5,18) 12 for m in range(12,13): #%02d(1,13) 13 for d in range(31,32):#%02d(1,32) 14 if ((m in [4,6,9,11]) and d>30) or (m==2 and d>29): 15 continue 16 for n in range(0,1):#05d(0,10000) 17 req=scrapy.Request("http://fz12345.fuzhou.gov.cn/detail.jsp?callId=FZ%02d%02d%02d%05d"%(y,m,d,n)) 18 reqs.append(req) 19 return reqs 20 21 def parse(self, response): 22 item=FjGovItem() #易错 ,注意修改名称 23 try: #关于xpath和css的知识,要自行百度咯 24 item["id"]=response.xpath("//div[@class='detail']//tr[1]/td[2]/text()").extract()[0] 25 item["title"]=response.xpath("//div[@class='detail']//tr[2]/td[2]/text()")[0].extract() 26 item["a_content"]="".join(response.xpath("//div[@class='detail']//tr[3]/td[2]/text()")[:-3].extract()) 27 item["department"]=response.xpath("//div[@class='detail']//tr[4]//span[1]/text()")[0].extract() 28 item["a_time"]=response.xpath("//div[@class='detail']//tr[7]/td[4]/text()")[0].extract().strip() 29 item["con_person"]=response.xpath("//div[@class='detail']//tr[6]/td[2]/text()")[0].extract().strip() 30 item["r_content"]=response.xpath("//div[@class='detail']//tr[5]/td[2]/text()[1]")[0].extract().strip() 31 if item["r_content"]: 32 item["r_time"]=response.xpath("//div[@class='detail']//tr[5]/td[2]/span[2]/text()")[0].extract().strip() 33 else: 34 item["r_time"]="" 35 yield item #这个别漏了 36 except: 37 pass 38
10.深入爬取(逻辑:先爬一个网站,然后从网站中爬出链接继续爬取!可以自定义好多层)
1 # -*- coding: utf-8 -*- 2 import scrapy 3 from minjian.items import MinjianItem 4 5 class NewsSpider(scrapy.Spider): 6 name = 'news' 7 allowed_domains = ['mju.edu.cn'] 8 start_urls = ['http://www.mju.edu.cn/html/xxyw/.html'] 9 def start_requests(self): 10 reqs=[] 11 for i in range(1,150): 12 req=scrapy.Request("http://www.mju.edu.cn/html/xxyw/%s.html" % i) 13 reqs.append(req) 14 return reqs #和9一样,建立链接列表 15 16 def parse(self, response): 17 news_lists=response.xpath("/html/body/div[2]/div[3]/div[2]/div[2]/ul/li") 18 for news_list in news_lists: 19 item=MinjianItem() 20 item["time"]=news_list.xpath("span[1]/text()").extract() 21 item["title"]=news_list.xpath("span[2]/a/text()").extract() 22 first_url=news_list.xpath("span[2]/a/@href")[0].extract() 23 item["url"]="http://www.mju.edu.cn%s"%first_url #item中要先设置一个 url=scrapy.Field() 24 yield scrapy.Request(url=item["url"],meta={"item":item},callback=self.number_parse,dont_filter=True) #回调函数 25 def number_parse(self,response): 26 item=response.meta["item"] #这个很关键,meta的运用可以百度百度 27 div=response.xpath("//div[@class='detail_main_content']/div") 28 div=div[0] 29 item["number"]=div.xpath("span[1]/text()").extract() 30 yield item #若需要更爬取第三层,这可以再设置一个回调函数,以此类推
结尾:
这部分教程只能用于爬取简单、结构化、反爬措施差的网页。
转载于:https://www.cnblogs.com/xielongteng/p/7513532.html
python-scrapy简单爬虫实现相关推荐
- Python Scrapy简单爬虫-爬取澳洲药店,代购党的福音
身在澳洲,近期和ld决定开始做代购,一拍即合之后开始准备工作.众所周知,澳洲值得买的也就那么点东西,奶粉.UGG.各种保健品,其中奶粉价格基本万年不变,但是UGG和保健品的价格变化可能会比较大.所以, ...
- python秒懂百科视频,Python开发简单爬虫
Python开发简单爬虫 源码网址: http://download.csdn.NET/detail/hanchaobiao/9860671 一.爬虫的简介及爬虫技术价值 1.什么是爬虫: 一段自动 ...
- c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...
用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 1- ...
- imooc疯狂的蚂蚁《Python开发简单爬虫》源代码
以下为imooc疯狂的蚂蚁<Python开发简单爬虫>源代码,调试有些问题. html_downloader.py import html_downloader import html_o ...
- python scrapy 简单教程_python之scrapy入门教程
看这篇文章的人,我假设你们都已经学会了python(派森),然后下面的知识都是python的扩展(框架). 在这篇入门教程中,我们假定你已经安装了Scrapy.如果你还没有安装,那么请参考安装指南. ...
- python scrapy框架爬虫_Python Scrapy爬虫框架学习
Scrapy 是用Python实现一个为爬取网站数据.提取结构性数据而编写的应用框架. 一.Scrapy框架简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数 ...
- python简单爬虫程序分析_[Python专题学习]-python开发简单爬虫
掌握开发轻量级爬虫,这里的案例是不需要登录的静态网页抓取.涉及爬虫简介.简单爬虫架构.URL管理器.网页下载器(urllib2).网页解析器(BeautifulSoup) 一.爬虫简介以及爬虫的技术价 ...
- python实现简单爬虫抓取图片
最近在学习python,正如大家所知,python在网络爬虫方面有着广泛的应用,下面是一个利用python程序抓取网络图片的简单程序,可以批量下载一个网站更新的图片,其中使用了代理IP的技术. imp ...
- python 报价程序_【python】简单爬虫制作(汽车之家易车网报价爬虫)
首先交代背景,逗逼女朋友每个月要花费半天多的时间去汽车网上找三十多个城市.十多款车型的报价数据,而且他们部门其它人也要做这种繁琐的工作.我在网络卡屎的情况下帮她做了一回,我就打死都想写个程序把这种st ...
最新文章
- JDK源码研究Jstack,JMap,threaddump,dumpheap的原理
- on条件与where条件的区别
- {}是set类型还是dict类型呢
- ubunto用户切换
- 20169214 2016-2017-2 《网络攻防实践》实验二学习总结
- 基于pygtk的linux有道词典
- 别用这种方式聊天,你都不知道自己是怎么聊死的
- ROS机器人程序设计(原书第2版)2.3 理解ROS开源社区级
- dart开发Android服务,关于android:在Flutter应用中使用由swagger生成的Dart代码生成的Web服务...
- 苹果修复被 XCSSET 恶意软件滥用的3个 0day
- [Jmeter][基础]Jmeter连接IMPALA
- JAVA设计模式1 ---- 简单工厂模式 (以汽车工厂为例)
- html图片幻灯片怎么做,纯CSS3制作满屏图像幻灯片
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——四大变换光照与材质
- java sof栈泄露_java虚拟机(四)--内存溢出、内存泄漏、SOF
- linux怎样配置文件,Linux常见的配置文件
- 格式化的u盘怎么恢复数据?
- Rails 文件存储
- 如何修改Android的ro属性
- 1.2 嵌入式微处理器体系结构
热门文章
- 数理统计-大厂笔试题
- c++对象回收问题_从垃圾回收解开Golang内存管理的面纱之三垃圾回收
- 修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)
- 全国计算机机专业考试试题,2010全国非计算机专业一级考试试题
- 正常web页面登录时效是多少_Web 系统的安全性测试之权限管理测试
- 四川大学计算机组成原理实验报告_20092014年计算机组成原理考研真题与解析
- python字符子串_子字符串和子序列(Python),子串,python
- php链表删除元素,PHP之从反向删除单链表元素的问题谈起
- java 获取手机系统_Android系统信息获取
- 为你的应用程序添加动态Java代码