Python集中营

Python集中营 查看完整档案

兰州编辑  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

搜索微信公众号【Python集中营】,专注后端编程技术分享、交流经验。

个人动态

Python集中营 发布了文章 · 今天 09:58

认识爬虫:在 python 爬虫过程中做一个正人君子?了解一下 robots.txt 文件吧?

什么是 robots.txt 文件?

网络爬虫程序在执行时,首先应该检查站点根目录是否存在 robots.txt 文件。当这个文本文件存在时应该按照它的规则来爬取执行相应的内容,也就是爬取站点开放范围内的内容。当然,如果说你的站点不想被任何形式的爬虫、这个时候搜索引擎也是不能收录你站点的内容的,搜索引擎不进行收录时网站的 SEO 优化也会受到影响。

robots.txt 文件防君子、不防小人。大多时候,robots.txt 文件的校验都被忽略了,最好在进行网络爬虫之前检验 robots.txt 文件是否存在,并且按照文件中定义的规则来检验爬虫的范围。

robots.txt 文件的定义规则是什么?

robots.txt 文件主要有 User-agent、Allow、Disallow 几个关键字来定义规则,User-agent 一般指的是对用户身份的限制,Allow、Disallow 主要是允许/拒绝访问 URL 地址。

  • 实例一

1# 允许所有的 robot 进行访问
2
3User-agent: * 
4
5Allow: /
  • 实例二

1#拒绝所有的 robot 进行访问
2
3User-agent: *
4
5Disallow: /
  • 实例三

1#拒绝所有的 robot 访问某个目录
2
3User-agent: *
4
5Disallow: /user/load/data
  • 实例四

1#允许所有的 robot 访问特定的目录
2
3User-agent: *
4
5Allow: /user/load
6
7Allow: /user/excel
  • 实例五

1#拒绝所有的 robot 访问某个目录下面 html 结尾的文件
2
3User-agent: *
4
5Disallow: /api/*.html
  • 实例六

1#仅允许所有用户访问 .jsp 结尾的文件
2
3User-agent: *
4
5Allow: .jsp$
6
7Disallow: /

在实际应用中可以根据具体站点的需求任意组合这三个关键字的使用,完成对爬虫规则范围的配置。

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 0 收藏 0 评论 0

Python集中营 发布了文章 · 今天 09:55

踩坑记:终于怀着忐忑的心情完成了对 python 爬虫扩展库 pyspider 的安装

在前面的系列文章中,笔者说了一些爬虫入门的相关知识点以及一些比较基本的爬虫方法和简单的框架使用等。下一个环节我么一起来看看 pyspider 框架。首先,这款框架的安装就十分令人头疼,花费了好几个小时本来要和女朋友聊天的时间,老王经过不断的踩坑终于安装成功了,所以,特别记录一下。

1、pyspider介绍

  • 一个国人编写的强大的网络爬虫系统并带有强大的WebUI。

  • 采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。

  • http://docs.pyspider.org/en/l...

2、基础安装环境介绍

  • 操作系统:Windows10

  • python 环境:python3.6.8

  • 操作人:老王的小跟班

3、准备扩展库工具

 1# 由于phantomjs官网下载太慢,可以到国内镜像站进行下载
 2
 3http://npm.taobao.org/dist/phantomjs/
 4
 5phantomjs(版本=2.1.1,支持javascript操作)
 6
 7wheel(支持.whl文件安装)
 8
 9# pycurl-7.43.0.4-cp36-cp36m-win_amd64.whl下载地址
10
11https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl
12
13pycurl-7.43.0.4-cp36-cp36m-win_amd64.whl(安装pycurl扩展库)
14
15wsgidav(版本=2.4.1)
16
17werkzeug(版本=0.15)

图片

4、开始安装 pyspider

 1a.安装phantomjs
 2
 3# 下载好phantomjs之后,解压之后配置好环境变量
 4
 5b.安装wheel
 6
 7python -m pip install wheel
 8
 9c.安装下载好的pycurl扩展库
10
11python -m pip install c:/tools/pycurl-7.43.0.4-cp36-cp36m-win_amd64.whl
12
13d.安装wsgidav依赖库
14
15# 先卸载当前高版本
16
17python -m pip uninstall wsgidav
18
19# 安装指定低版本
20
21python -m pip install wsgidav=2.4.1
22
23e.安装werkzeug
24
25# 先卸载当前高版本
26
27python -m pip uninstall werkzeug
28
29# 安装指定低版本
30
31python -m pip install werkzeug=0.15
32
33f.最后安装pyspider
34
35python -m pip install pyspider

5、启动问题

图片

图片

 1a.直接启动
 2
 3pyspider all
 4
 5b.启动中如果出现一直在 restarting的情况
 6
 7# 处理办法:打开一个终端,输入命令启动。再打开一个新的终端启动,此时再关闭第一个终端,第二个终端会启动成功。
 8
 9# 为什么?我也不知道,这是在 Google 上找的解决办法。
10
11c.第一次启动的时间比较长
12
13d.启动成功之后访问地址
14
15http://localhost:5000
16
17e.启动之后关闭终端,代表pyspider服务也会关闭

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 0 收藏 0 评论 0

Python集中营 发布了文章 · 4月8日

爬虫实战:python 扩展库 urllib2 应用之如何自定义电影类型爬取豆瓣电影数据?

1、导入项目所需要的的扩展库

1# -*- coding: UTF-8 -*-
2
3# 导入 urllib 用于参数数据编码
4import urllib
5# 导入 urllib2 用于执行核心爬虫
6import urllib2
7
8# 导入 UserAgent 用于生成 UA
9from fake_useragent import UserAgent

2、执行网页请求函数

 1# 执行网页请求
 2def req_url(self,full_url):
 3    # 构造请求头
 4    headers = {
 5        # 随机生成一个 User-Agent
 6        'User-Agent': self.user_agent.random,
 7        # 设置请求格式
 8        "Accept": "application/json, text/plain, */*",
 9        # 允许请求语言
10        "Accept-Language": "zh-CN,zh;q=0.8"
11    }
12    # 请求参数
13    params = {
14        'start':self.begin,
15        'tags':self.name
16    }
17    # 对中文参数编码
18    params = urllib.urlencode(params)
19    # 构造 Request 请求对象
20    request = urllib2.Request(headers=headers, url=full_url,data=params)
21    # 执行请求
22    response = urllib2.urlopen(request)
23    return response.read()

3、保存文件

1# 将爬取下来的 html 源代码保存
2def save_doc(self,html_doc, file_name):
3    print "开始保存文件:", file_name
4    with open(file_name, 'w') as f:
5        f.write(html_doc)
6    print "完成文件:", file_name, " 保存"

4、组装执行爬虫

1# 构造爬虫环境、并执行
2def run_spider(self):
3    # 根据页数定义文件名称
4    file_name = str(self.name) + '.html'
5    # 执行爬虫网页请求
6    html_doc = self.req_url(self.url)
7    # 保存文件
8    self.save_doc(html_doc, file_name)

5、用户自定义输入

1# 用户自定义输入参数
2url = 'https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10'
3type_name = raw_input('请输入豆瓣电影类型:')
4begin = int(raw_input('请输入爬取条数:'))

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

在这里插入图片描述

查看原文

赞 0 收藏 0 评论 0

Python集中营 发布了文章 · 4月7日

爬虫实战:urllib2 应用之如何实现对某贴吧数据针对爬取、并完成实现代码封装?

1、导入项目所需要的的扩展库

1# -*- coding: UTF-8 -*-
2
3# 导入 urllib 用于参数数据编码
4import urllib
5# 导入 urllib2 用于执行核心爬虫
6import urllib2
7
8# 导入 UserAgent 用于生成 UA
9from fake_useragent import UserAgent

2、执行网页请求函数

 1# 执行网页请求
 2def req_url(self,full_url):
 3    headers = {
 4        # 随机生成一个 User-Agent
 5        'User-Agent': self.user_agent.random
 6    }
 7    # 构造 Request 请求对象
 8    request = urllib2.Request(headers=headers, url=full_url)
 9    # 执行请求
10    response = urllib2.urlopen(request)
11    return response.read()

3、保存网页下载的 html 源代码

1# 将爬取下来的 html 源代码保存
2def save_doc(self,html_doc, file_name):
3    print "开始保存文件:", file_name
4    with open(file_name, 'w') as f:
5        f.write(html_doc)
6    print "完成文件:", file_name, " 保存"

4、组装完整的爬虫地址、参数组装等

 1# 构造爬虫环境、并执行
 2def run_spider(self):
 3    for page in range(self.begin, self.end + 1):
 4        # 计算页码
 5        pn = (page - 1) * 50
 6        # 对中文参数进行编码
 7        name = urllib.urlencode({'kw': self.tieba_name})
 8        # 组装完整的爬虫地址
 9        full_url = self.url + name + '&pn=' + str(pn)
10        # 根据页数定义文件名称
11        file_name = str(page) + '.html'
12        # 执行爬虫网页请求
13        html_doc = self.req_url(full_url)
14        # 保存文件
15        self.save_doc(html_doc, file_name)

5、用户自定义输入参数

1# 用户输入相关数据
2url = 'http://tieba.baidu.com/f?'
3tieba_name = raw_input('请输入要爬取的贴吧名称:')
4begin = int(raw_input('请输入开始页码:'))
5end = int(raw_input('请输入结束页码:'))

实力的提升是最重要的,进入公众号回复:“贴吧爬虫源代码”,领取贴吧爬虫源代码、快去领取刷题吧~

image.png

查看原文

赞 0 收藏 0 评论 0

Python集中营 发布了文章 · 4月6日

认识爬虫:优秀的爬虫利器,pyquery 框架爬虫到底有多简洁?

了解过了 BeautifulSoup 对象的爬虫解析、lxml 扩展库的 xpath 语法等 html 的解析库,现在来说说 pyquery ,看名称就长得和 jquery 很像。其实,pyquery 就是仿照 jquery 的语法来实现的,语法使用可以说是几乎相同,算是前端爬虫的福利语言,如果你恰好会一些 jquery 的语法使用起来就会非常简单。

1、安装并导入 pyquery 扩展库

1pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ pyquery
2
3# -*- coding: UTF-8 -*-
4
5# 导入 pyquery 扩展库
6from pyquery import PyQuery as pq

2、pyquery 执行网页请求(不常用)

1'''
2直接使用 PyQuery 对象即可发送网页请求,返回响应信息
3'''
4
5# GET 请求
6print(PyQuery(url='http://www.baidu.com/', data={},headers={'user-agent': 'pyquery'},method='get'))
7
8# POST 请求
9print(PyQuery(url='http://httpbin.org/post',data={'name':u"Python 集中营"},headers={'user-agent': 'pyquery'}, method='post', verify=True))

3、pyquery 执行网页源代码解析(常用)

  • 解析对象初始化
 1# 首先获取到网页下载器已经下载到的网页源代码
 2# 这里直接取官方的案例
 3html_doc = """
 4<html><head><title>The Dormouse's story</title></head>
 5<body>
 6<p class="title"><b>The Dormouse's story</b></p>
 7
 8<p class="story">Once upon a time there were three little sisters; and their names were
 9<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
10<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
11<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
12and they lived at the bottom of a well.</p>
13
14<p class="story">...</p>
15"""
16
17# 初始化解析对象
18pyquery_obj = PyQuery(html_doc)
  • css选择器模式提取元素及元素文本
 1# 获取a标签元素、文本
 2print(pyquery_obj('a'))
 3print(pyquery_obj('a').text())
 4
 5# 获取class=story元素、文本
 6print(pyquery_obj('.story'))
 7print(pyquery_obj('.story').text())
 8
 9# 获取id=link3元素、文本
10print(pyquery_obj('#link3'))
11print(pyquery_obj('#link3').text())
12
13# 获取body下面p元素、文本
14print(pyquery_obj('body p'))
15print(pyquery_obj('body p').text())
16
17# 获取body和p元素、文本
18print(pyquery_obj('p,a'))
19print(pyquery_obj('p,a').text())
20
21# 获取body和p元素、文本
22print(pyquery_obj("[class='story']"))
23print(pyquery_obj("[class='story']").text())
  • 获取元素之后再进一步提取信息
1# 提取元素文本
2print("......元素再提取......")
3print("所有a元素文本",pyquery_obj('a').text())
4print("第一个a元素的html文本",pyquery_obj('a').html())
5print("a元素的父级元素",pyquery_obj('a').parent())
6print("a元素的子元素",pyquery_obj('a').children())
7print("所有a元素中id是link3的元素",pyquery_obj('a').filter('#link3'))
8print("最后一个a元素的href属性值",pyquery_obj('a').attr.href)
  • dom操作
 1# attr() 函数获取属性值
 2print(pyquery_obj('a').filter('#link3').attr('href'))
 3# attr.属性,获取属性值
 4print(pyquery_obj('a').filter('#link3').attr.href)
 5print(pyquery_obj('a').filter('#link3').attr.class_)
 6# 添加 class 属性值 w
 7pyquery_obj('a').filter('#link3').add_class('w')
 8print(pyquery_obj('a').filter('#link3').attr('class'))
 9
10# 移除 class 属性值 w
11pyquery_obj('a').filter('#link3').remove_class('sister')
12print(pyquery_obj('a').filter('#link3').attr('class'))
13# 移除标签
14pyquery_obj('html').remove('a')
15print(pyquery_obj)

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 0 收藏 1 评论 0

Python集中营 发布了文章 · 4月5日

认识爬虫:提取网站 cookie 信息,并使用 cookie 信息实现登录

为什么要使用 cookie 信息来进行爬虫呢?做后端的朋友们都知道,一般情况下,在服务器上发布接口都是要设置身份信息验证,验证的方式就是通过 cookie 信息中包含的身份认证来进行验证。在身份验证通过之后,才能获取到响应接口的信息,所以,掌握这一点在爬虫过程中也是极为必要,不然只能爬取一些不需要验证的公开信息,话不多说,我们进入实战环节。

1、导入依赖的第三方扩展库

 1# -*- coding: UTF-8 -*-
 2
 3# 导入 urllib 库,对请求参数进行编码
 4import urllib
 5
 6# 导入 urllib2 库,完成网络请求
 7import urllib2
 8
 9# 导入 cookielib 库,用于操作 cookie 信息
10import cookielib

2、登录网站并提取 cookie 信息进行保存

 1# 设置文件路径
 2filename = u'usr/load/cookie.txt'
 3
 4# 创建 MozillaCookieJar 对象用于操作 cookie 信息
 5cookie_obj = cookielib.MozillaCookieJar(filename)
 6# 构建 opener 对象
 7opener_obj = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_obj))
 8
 9# 构建用户名、密码,并进行 encode 编码
10params = urllib.urlencode({
11    'account': '000000',
12    'passwd': '000000'
13})
14
15# 定义网站登录地址
16login_url = 'http://wefd.com/login'
17
18# 向服务器发送请求、实现用户名/密码登录
19result = opener_obj.open(url=login_url, data=params)
20
21# 保存 cookie 信息
22cookie_obj.save(ignore_discard=True, ignore_expires=True)

3、提取保存的 cookie 信息并使用 cookie 信息完成登录

 1# 创建 MozillaCookieJar 实例对象用于操作 cookie 信息
 2cookie_obj = cookielib.MozillaCookieJar()
 3
 4# 设置文件路径
 5filename = u'usr/load/cookie.txt'
 6
 7# 加载 cookie 信息到 MozillaCookieJar 对象
 8cookie_obj.load(filename, ignore_discard=True, ignore_expires=True)
 9
10# 定义网站登录地址
11login_url = 'http://wefd.com/login'
12
13# 创建 Request 请求
14request = urllib2.Request(login_url)
15
16# 构建 opener 对象,并加入 cookie 信息
17opener_obj = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_obj))
18
19# 执行登录请求
20response = opener_obj.open(request)
21print response.read()

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 1 收藏 1 评论 0

Python集中营 发布了文章 · 4月4日

认识爬虫:python 网页解析器,掌握第三方 lxml 扩展库与 xpath 的使用方法?

前面一章中说到了使用 BeautifulSoup 对象来解析爬虫过程中下载的网页,而今天说的则是使用另外一种扩展库 lxml 来对网页完成解析。同样的,lxml 库能完成对 html、xml 格式的文件解析,并且能够用来解析大型的文档、解析速度也是相对比较快的。

要掌握 lxml 的使用,就需要掌握掌握 xpath 的使用方法,因为 lxml 扩展库就是基于 xpath 的,所以这一章的重点主要还是对 xpath 语法使用的说明。

1、导入 lxml 扩展库、并创建对象

 1# -*- coding: UTF-8 -*-
 2
 3# 从 lxml 导入 etree
 4from lxml import etree
 5
 6# 首先获取到网页下载器已经下载到的网页源代码
 7# 这里直接取官方的案例
 8html_doc = """
 9<html><head><title>The Dormouse's story</title></head>
10<body>
11<p class="title"><b>The Dormouse's story</b></p>
12
13<p class="story">Once upon a time there were three little sisters; and their names were
14<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
15<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
16<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
17and they lived at the bottom of a well.</p>
18
19<p class="story">...</p>
20"""
21
22# 初始化网页下载器的 html_doc 字符串,返回一个 lxml 的对象
23html = etree.HTML(html_doc)

2、使用 xpath 语法提取网页元素

  • 按照节点的方式获取元素
1# xpath() 使用标签节点的方式获取元素
2print html.xpath('/html/body/p')
3# [<Element p at 0x2ebc908>, <Element p at 0x2ebc8c8>, <Element p at 0x2eb9a48>]
4print html.xpath('/html')
5# [<Element html at 0x34bc948>]
6# 在当前节点的子孙节点中查找 a 节点
7print html.xpath('//a')
8# 在当前节点的子节点中查找 html 节点
9print html.xpath('/html')
  • 按照筛选的方式获取元素
 1'''
 2根据单一属性获取元素
 3'''
 4# 获取子孙节点中,属性 class=bro 的 a 标签
 5print html.xpath('//a[@class="bro"]')
 6
 7# 获取子孙节点中,属性 id=link3 的 a 标签
 8print html.xpath('//a[@id="link3"]')
 9
10'''
11根据多个属性获取元素
12'''
13# 获取class属性等于sister,并且id等于link3的a标签
14print html.xpath('//a[contains(@class,"sister") and contains(@id,"link1")]')
15
16# 获取class属性等于bro,或者id等于link1的a标签
17print html.xpath('//a[contains(@class,"bro") or contains(@id,"link1")]')
18
19# 使用 last() 函数,获取子孙代的a标签的最后一个a标签
20print html.xpath('//a[last()]')
21# 使用 1 函数,获取子孙代的a标签的第一个a标签
22print html.xpath('//a[1]')
23# 标签筛选,position()获取子孙代的a标签的前两个a标签
24print html.xpath('//a[position() < 3]')
25
26'''
27使用计算的方式,获取多个元素
28'''
29# 标签筛选,position()获取子孙代的a标签的第一个与第三个标签
30# 可以使用的计算表达式:>、<、=、>=、<=、+、-、and、or
31print html.xpath('//a[position() = 1 or position() = 3]')
  • 获取元素的属性与文本
1'''
2使用@获取属性值,使用text() 获取标签文本
3'''
4# 获取属性值
5print html.xpath('//a[position() = 1]/@class')
6# ['sister']
7# 获取标签的文本值
8print html.xpath('//a[position() = 1]/text()')

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 0 收藏 0 评论 0

Python集中营 发布了文章 · 4月3日

认识爬虫:User-Agent 是什么,如何使用 fake_useragent 扩展库随机生成各种 UA?

很多网站服务器往往通过判断客户端请求头中的 User-Agent 包含的操作系统信息、浏览器信息等来给不同的客户端浏览器发送不同的页面显示更好的效果。因此,在爬虫过程中就需要将我们自己的请求身份伪装成某种浏览器,而这个伪装信息就包含在 User-Agent 字段的赋值中,所以才要研究如何随机的生成各种不同的 User-Agent 的值来伪装我们的爬虫身份。

1、浏览器的 UA 字符串

服务器对客户端请求头的 UserAgent 检测又称为 UA 检测,UA 值的字符串标准格式一般为:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息。根据操作系统、浏览器信息等的不同可以随机组合出不同的 User-Agent 的值。

2、导入 fake_useragent、并创建对象

1# -*- coding: UTF-8 -*-
2
3# 从 fake_useragent 模块导入 UserAgent
4from fake_useragent import UserAgent
5
6# 创建 UserAgent 对象
7user_agent = UserAgent()

3、不同浏览器如何随机生成 User-Agent

 1# 随机统计生成 User-Agent
 2print user_agent.random
 3# 随机生成 ie 的 User-Agent
 4print user_agent.ie
 5# 随机生成 opera 的 User-Agent
 6print user_agent.opera
 7# 随机生成 chrome 的 User-Agent
 8print user_agent.chrome
 9# 随机生成 google 的 User-Agent
10print user_agent.google
11# 随机生成 firefox 的 User-Agent
12print user_agent.firefox
13# 随机生成 safari 的 User-Agent
14print user_agent.safari

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 0 收藏 0 评论 0

Python集中营 发布了文章 · 4月2日

认识爬虫:怎么使用代理 IP 规避反爬虫以及使用爬虫获取更多可用的免费代理 IP?

在一些网站服务中,除了对 user-agent 的身份信息进行检测、也对客户端的 ip 地址做了限制,如果是同一个客户端访问此网站服务器的次数过多就会将其识别为爬虫,因而,限制其客户端 ip 的访问。这样的限制给我们的爬虫带来了麻烦,所以使用代理 ip 在爬虫中是非常有必要的。

要使用代理 ip 进行爬虫就面临两个问题,一是怎么使用、这个就相对简单,另一个是怎么获取这么多的代理 ip。获取代理 ip 可以去代理 ip 的站点购买、也有免费的代理 ip 站点,相对来说买的代理 ip 的质量更高一些,最后,我们可以使用爬虫技术来爬取一些可用的代理 ip 也就是下面主要说的内容。

1、怎么使用代理 ip 进行爬虫

和之前使用请求的形式一样,使用代理 ip 时在请求方法上面加入 proxies 的参数设置为 {"http":"代理ip"} 的字典参数值即可使用代理 ip 对服务器发起请求。

1response = requests.get(url=url, headers=headers, 
2                        params=params,proxies={"http":"117.136.27.43"})

2、怎么在其他站点上爬取可用的代理 ip

爬取代理 ip 的思路相对也比较简单,首先使用网页下载器下载相应的网页、然后提取网页中的所有的代理 ip,最后一步就是验证爬取的代理 ip 是否是可用,将验证通过的代理 ip 进行保存以供后续爬虫使用。

  • 使用网页下载器下载网页
 1# -*- coding: UTF-8 -*-
 2
 3# 导入 requests 扩展库
 4import requests
 5# 导入解析库
 6from bs4 import BeautifulSoup
 7
 8# 初始化 url 地址(这里只获取首页展示的 ip)
 9url = 'http://www.66ip.cn'
10# 网页内容 current
11current = ''
12
13try:
14    headers = {
15        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
16    }
17    response = requests.get(url=url, timeout=5, headers=headers)
18    current = response.text
19
20except Exception:
21    print('网页下载失败 ···')
  • 解析网页并提取代理 ip
 1# 导入 re 模块
 2import re
 3
 4# 创建正则表达式匹配ip地址
 5regx_ip = re.compile(r'^((2(5[0-5]|[0-4]d))|[0-1]?d{1,2})(.((2(5[0-5]|[0-4]d))|[0-1]?d{1,2})){3}')
 6# 创建正则表达式匹配 port 地址
 7regx_port = re.compile(r'^([0-9]|[1-9]d{1,3}|[1-5]d{4}|6[0-5]{2}[0-3][0-5])$')
 8
 9# 定义初始化list存放解析后的ip
10ip_array = []
11
12# 创建解析对象
13beau_soup = BeautifulSoup(current, 'html.parser')
14# 获取所有的td标签
15trs = beau_soup.find_all('tr')
16
17# 遍历提取ip和端口
18for tr in trs:
19    tds = tr.find_all('td')
20    ip_port = ''
21    for td in tds:
22        if regx_ip.match(td.text):
23            ip_port = ip_port + 'http://' + td.text
24        if regx_port.match(td.text):
25            ip_port = ip_port + ':' + td.text
26    if ip_port != '':
27        ip_array.append(ip_port)
28
29# 爬取到的代理ip
30print ip_array
31
32# 分装 ip和端口使用字典的形式保存
33ip_dict_list = []
34for ip in ip_array:
35    ip_dict = {'http':ip}
36    ip_dict_list.append(ip_dict)
37
38print ip_dict_list
  • 验证获取的代理 ip 是否可用
 1# 导入 random 扩展库、生成随机数
 2import random
 3# 验证代理ip
 4# 随机获取代理ip
 5proxy = ip_dict_list[random.randint(0,len(ip_dict_list) - 1)]
 6# 初始化验证成功的ip数组
 7ip_sucess_array = []
 8try:
 9    print '当前代理:',proxy
10    requests.get(url='http://www.baidu.com',headers=headers,timeout=3,proxies=proxy)
11    print '验证成功'
12    ip_sucess_array.append(proxy)
13except Exception,e:
14    print '验证失败'

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 0 收藏 0 评论 0

Python集中营 发布了文章 · 4月1日

认识爬虫:如何使用 requests 模块根据电影类型爬取豆瓣电影排名前20的信息与评分

1、导入扩展模块

1# -*- coding: UTF-8 -*-
2# 导入网络请求模块 requests
3import requests
4# 导入 random 模块用来产生随机数
5import random

2、定义爬虫地址、并伪装头部信息

 1# 定义请求的 url 接口(需要请求的接口),假设接口 https://movie.douban.com/j/new_search_subjects
 2url = 'https://movie.douban.com/j/new_search_subjects'
 3
 4# 初识 user-agent,事先准备 user-agent 用于头部信息伪装
 5# 后续会说到如何生成 user-agent
 6user_agent = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 '
 7              'Safari/537.36',
 8              'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
 9              'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 '
10              'Safari/534.50 '
11              ]
12
13# 定义请求头部信息(字典类型)
14headers = {
15    # User-Agent 信息用于伪装成用户访问,random.randint(0,2) 随机取出数组中定义好的一个
16    'User-Agent': user_agent[random.randint(0, 2)]
17}

3、封装请求参数

1# 设置请求参数,根据测试 range 必须赋值才可以取到数据
2params = {
3    'sort': '',
4    'range': '0,20',
5    'tags': '',
6    'start': '0',
7    'genres': '爱情',
8}

4、执行请求、并处理返回结果

 1# 执行 GET 请求
 2response = requests.get(url=url, headers=headers, params=params)
 3
 4# 打印响应信息,返回为 json 数据
 5print response.content
 6
 7# 使用response.json() 函数进行序列化输出
 8data_json = response.json()
 9print data_json
10
11# 提取 data_json 中的具体数据
12data_json_array = data_json['data']
13print data_json_array
14
15# 遍历获取电影名称、评分信息
16for data_line in data_json_array:
17    print '电影名称:', data_line['title'], ' -> 评分:', data_line['rate']

更多精彩前往微信公众号【Python 集中营】,专注于 python 技术栈,资料获取、交流社区、干货分享,期待你的加入~

image.png

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 2 次点赞
  • 获得 3 枚徽章 获得 0 枚金徽章, 获得 1 枚银徽章, 获得 2 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-09-03
个人主页被 1.1k 人浏览