useragentstring.com 网站几乎廊括了所有的User-Agent,刚学了scrapy,打算那它练手,把上面的 user-agent 爬取下来。

本文只爬取常见的 FireFox, Chrome, Opera, Safri, Internet Explorer

一、创建爬虫项目

1.创建爬虫项目useragent
$ scrapy startproject useragent
2.进入项目目录
$ cd useragent
3.生成爬虫文件 ua

这一步不是必须的,不过有了就方便些

$ scrapy genspider ua useragentstring.com

二、编辑 item 文件

# useragent\items.py
import scrapy class UseragentItem(scrapy.Item):
# define the fields for your item here like:
ua_name = scrapy.Field()
ua_string = scrapy.Field()

三、编辑爬虫文件

# useragent\spiders\ua.py 

import scrapy

from useragent.items import UseragentItem

class UaSpider(scrapy.Spider):
name = "ua"
allowed_domains = ["useragentstring.com"]
start_urls = (
'http://www.useragentstring.com/pages/useragentstring.php?name=Firefox',
'http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer',
'http://www.useragentstring.com/pages/useragentstring.php?name=Opera',
'http://www.useragentstring.com/pages/useragentstring.php?name=Safari',
'http://www.useragentstring.com/pages/useragentstring.php?name=Chrome',
) def parse(self, response):
ua_name = response.url.splite('=')[-1]
for ua_string in response.xpath('//li/a/text()').extract():
item = UseragentItem()
item['ua_name'] = ua_name
item['ua_string'] = ua_string.strip()
yield item

四、运行爬虫

通过参数-o,控制爬虫输出为 json 文件

$ scrapy crawl ua -o item.json

结果如图:

看起来没有得到想要的结果,注意到那个robot.txt。我猜测可能是网站禁止爬虫

猜的对不对先不管,先模拟浏览器再说,给所有的 request 添加 headers:

# useragent\spiders\ua.py 

import scrapy

from useragent.items import UseragentItem

class UaSpider(scrapy.Spider):
name = "ua"
allowed_domains = ["useragentstring.com"]
start_urls = (
'http://www.useragentstring.com/pages/useragentstring.php?name=Firefox',
'http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer',
'http://www.useragentstring.com/pages/useragentstring.php?name=Opera',
'http://www.useragentstring.com/pages/useragentstring.php?name=Safari',
'http://www.useragentstring.com/pages/useragentstring.php?name=Chrome',
) # 在所有的请求发生之前执行
def start_requests(self):
for url in self.start_urls:
headers = {"User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"}
yield scrapy.Request(url, callback=self.parse, headers=headers) def parse(self, response):
ua_name = response.url.split('=')[-1]
for ua_string in response.xpath('//li/a/text()').extract():
item = UseragentItem()
item['ua_name'] = ua_name
item['ua_string'] = ua_string.strip()
yield item

在运行,OK了!

效果图如下:

好了,以后不愁没有 User Agent用了。

scrapy 爬取 useragent的更多相关文章

  1. scrapy爬取全部知乎用户信息

    # -*- coding: utf-8 -*- # scrapy爬取全部知乎用户信息 # 1:是否遵守robbots_txt协议改为False # 2: 加入爬取所需的headers: user-ag ...

  2. Scrapy爬取Ajax(异步加载)网页实例——简书付费连载

    这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页. 这里以简书里的优选连载网页为例分享一下我的爬取过程. 网址为: ht ...

  3. Scrapy爬取静态页面

    Scrapy爬取静态页面 安装Scrapy框架: Scrapy是python下一个非常有用的一个爬虫框架 Pycharm下: 搜索Scrapy库添加进项目即可 终端下: #python2 sudo p ...

  4. 用scrapy爬取京东的数据

    本文目的是使用scrapy爬取京东上所有的手机数据,并将数据保存到MongoDB中. 一.项目介绍 主要目标 1.使用scrapy爬取京东上所有的手机数据 2.将爬取的数据存储到MongoDB 环境 ...

  5. Scrapy爬取美女图片第四集 突破反爬虫(上)

     本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...

  6. scrapy爬取美女图片

    使用scrapy爬取整个网站的图片数据.并且使用 CrawlerProcess 启动. 1 # -*- coding: utf-8 -* 2 import scrapy 3 import reques ...

  7. 以豌豆荚为例,用 Scrapy 爬取分类多级页面

    本文转载自以下网站:以豌豆荚为例,用 Scrapy 爬取分类多级页面 https://www.makcyun.top/web_scraping_withpython17.html 需要学习的地方: 1 ...

  8. python scrapy爬取HBS 汉堡南美航运公司柜号信息

    下面分享个scrapy的例子 利用scrapy爬取HBS 船公司柜号信息 1.前期准备 查询提单号下的柜号有哪些,主要是在下面的网站上,输入提单号,然后点击查询 https://www.hamburg ...

  9. 用scrapy爬取搜狗Lofter图片

    用scrapy爬取搜狗Lofter图片 # -*- coding: utf-8 -*- import json import scrapy from scrapy.http import Reques ...

随机推荐

  1. 在iOS 8中使用UIAlertController

    iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸 ...

  2. LevelDB源码分析--使用Iterator简化代码设计

    我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文. 下面我们再来看一个例子,我们为一个书店写程序, ...

  3. 在SQL2008R2查询分析器出错(在执行批处理时出现错误。错误消息为: 目录名称无效。)

    在用SQL2008R2查询分析器时 SELECT * FROM 表名; 出错: 在执行批处理时出现错误.错误消息为: 目录名称无效. 原因: 在打开查询分析器时,用360软件清空了临时文件(只是偶尔1 ...

  4. Eclipse 快捷键 篇

    1. Ctrl+Shift+R:打开资源这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xml ...

  5. BaseDao

    public class BaseDao { private static Log logger = LogFactory.getLog(BaseDao.class); // 查询数据 public ...

  6. 字符串长度函数strlen()

    如下是我的测试文件: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { ...

  7. 手机打开PC端网址自动跳转到手机站代码

    <script>function uaredirect(murl){ try { if(document.getElementById("bdmark") != nul ...

  8. [转][ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action

    本文转自:http://www.cnblogs.com/willick/p/3410855.html 概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在 ...

  9. 使用jsonpath解析json内容

    JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...

  10. selenium如何操作cookies实现免登录

    执行接口测试或者某些自动化测试时,为了避免每次访问接口都需要登录操作,可以用访问接口时,把cookies信息传过去. 思路是先登录一次页面,获取到cookies信息,把cookies信息保存到本地文件 ...