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简单爬虫实现相关推荐

  1. Python Scrapy简单爬虫-爬取澳洲药店,代购党的福音

    身在澳洲,近期和ld决定开始做代购,一拍即合之后开始准备工作.众所周知,澳洲值得买的也就那么点东西,奶粉.UGG.各种保健品,其中奶粉价格基本万年不变,但是UGG和保健品的价格变化可能会比较大.所以, ...

  2. python秒懂百科视频,Python开发简单爬虫

    Python开发简单爬虫 源码网址:  http://download.csdn.NET/detail/hanchaobiao/9860671 一.爬虫的简介及爬虫技术价值 1.什么是爬虫: 一段自动 ...

  3. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  4. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 1- ...

  5. imooc疯狂的蚂蚁《Python开发简单爬虫》源代码

    以下为imooc疯狂的蚂蚁<Python开发简单爬虫>源代码,调试有些问题. html_downloader.py import html_downloader import html_o ...

  6. python scrapy 简单教程_python之scrapy入门教程

    看这篇文章的人,我假设你们都已经学会了python(派森),然后下面的知识都是python的扩展(框架). 在这篇入门教程中,我们假定你已经安装了Scrapy.如果你还没有安装,那么请参考安装指南. ...

  7. python scrapy框架爬虫_Python Scrapy爬虫框架学习

    Scrapy 是用Python实现一个为爬取网站数据.提取结构性数据而编写的应用框架. 一.Scrapy框架简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数 ...

  8. python简单爬虫程序分析_[Python专题学习]-python开发简单爬虫

    掌握开发轻量级爬虫,这里的案例是不需要登录的静态网页抓取.涉及爬虫简介.简单爬虫架构.URL管理器.网页下载器(urllib2).网页解析器(BeautifulSoup) 一.爬虫简介以及爬虫的技术价 ...

  9. python实现简单爬虫抓取图片

    最近在学习python,正如大家所知,python在网络爬虫方面有着广泛的应用,下面是一个利用python程序抓取网络图片的简单程序,可以批量下载一个网站更新的图片,其中使用了代理IP的技术. imp ...

  10. python 报价程序_【python】简单爬虫制作(汽车之家易车网报价爬虫)

    首先交代背景,逗逼女朋友每个月要花费半天多的时间去汽车网上找三十多个城市.十多款车型的报价数据,而且他们部门其它人也要做这种繁琐的工作.我在网络卡屎的情况下帮她做了一回,我就打死都想写个程序把这种st ...

最新文章

  1. JDK源码研究Jstack,JMap,threaddump,dumpheap的原理
  2. on条件与where条件的区别
  3. {}是set类型还是dict类型呢
  4. ubunto用户切换
  5. 20169214 2016-2017-2 《网络攻防实践》实验二学习总结
  6. 基于pygtk的linux有道词典
  7. 别用这种方式聊天,你都不知道自己是怎么聊死的
  8. ROS机器人程序设计(原书第2版)2.3 理解ROS开源社区级
  9. dart开发Android服务,关于android:在Flutter应用中使用由swagger生成的Dart代码生成的Web服务...
  10. 苹果修复被 XCSSET 恶意软件滥用的3个 0day
  11. [Jmeter][基础]Jmeter连接IMPALA
  12. JAVA设计模式1 ---- 简单工厂模式 (以汽车工厂为例)
  13. html图片幻灯片怎么做,纯CSS3制作满屏图像幻灯片
  14. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——四大变换光照与材质
  15. java sof栈泄露_java虚拟机(四)--内存溢出、内存泄漏、SOF
  16. linux怎样配置文件,Linux常见的配置文件
  17. 格式化的u盘怎么恢复数据?
  18. Rails 文件存储
  19. 如何修改Android的ro属性
  20. 1.2 嵌入式微处理器体系结构

热门文章

  1. 数理统计-大厂笔试题
  2. c++对象回收问题_从垃圾回收解开Golang内存管理的面纱之三垃圾回收
  3. 修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)
  4. 全国计算机机专业考试试题,2010全国非计算机专业一级考试试题
  5. 正常web页面登录时效是多少_Web 系统的安全性测试之权限管理测试
  6. 四川大学计算机组成原理实验报告_20092014年计算机组成原理考研真题与解析
  7. python字符子串_子字符串和子序列(Python),子串,python
  8. php链表删除元素,PHP之从反向删除单链表元素的问题谈起
  9. java 获取手机系统_Android系统信息获取
  10. 为你的应用程序添加动态Java代码