2019-08-04 16:00:01 wcg541 阅读数 55
  • Python爬虫开发

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 讲师:波波老师 曾就职于百度,任爬虫开发工程师 擅长数据分析和爬虫技术,喜欢研究各种爬虫奇淫巧技,专治各种反爬取疑难杂症 课程简介: "信息时代,数据为王,互联网包含了迄今为止最有用的数据集,并且大部分可以免费公开访问,但是由于数据被嵌入在众多网站的结构和样式中导致难以被复用,应运而生出现了网络爬虫,使用程序自动抓取互联网上的资源。本系列课程将带你开发自动化程序实现数据自动采集,针对众多网站防止数据被获取采取防爬虫方案,课程中包含对防爬策略所有解决方法,专治各种爬虫疑难杂症,使你在爬虫方向真正做到“遇鬼杀鬼,遇神杀神,所向披靡”。同时课程还从源码级别深度剖析流行的爬虫框架,研究如何提高爬虫性能和数据抓取效率。 为什么学习这个课程? 掌握数据意味着掌握未来,现阶段行业内对爬虫工程师的需求日益增长,基于数据分析和挖掘类的创业公司也如雨后春笋般迸发生机,业内基于Python进行爬虫开发也正在成为主流,正所谓选择大于努力,选择对的语言以及正确的方向,才能更容易有更多机会,还在犹豫什么?抓紧搭上这班快速行进的列车。

    3948 人正在学习 去看看 高乐

今天介绍个神奇的网站!堪称爬虫偷懒的神器!

我们在写爬虫,构建网络请求的时候,不可避免地要添加请求头( headers ),以 mdn 学习区为例,我们的请求头是这样的:

一般来说,我们只要添加 user-agent 就能满足绝大部分需求了,Python 代码如下:

import requests

headers = {
    #'authority': 'developer.mozilla.org',
    #'pragma': 'no-cache',
    #'cache-control': 'no-cache',
    #'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 YaBrowser/19.7.0.1635 Yowser/2.5 Safari/537.36',
    #'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    #'accept-encoding': 'gzip, deflate, br',
    #'accept-language': 'zh-CN,zh-TW;q=0.9,zh;q=0.8,en-US;q=0.7,en;q=0.6',
    #'cookie': 你的cookie,
}

response = requests.get('https://developer.mozilla.org/zh-CN/docs/learn', headers=headers)

但是有些请求,我们要把特定的 headers 参数添加上才能获得正确的网络响应,不知道哪个参数是必要的情况下,就要先把所有参数都添加上,再逐个排除。

但是手动复制粘贴 headers 字典里的每一个键值对太费事了

一个不那么方便的解决方案:

用正则表达式或者直接字符串替换,把 headers 字符串直接转化为字典,封装成函数方便以后反复调用。

有的人喜欢用这种方法,每次复制headers信息,然后调用自己封装好的函数,但我觉得还是挺麻烦的。

那么还有没有快速一键生成 Python 爬虫请求头的方法呢?

这里给大家介绍两个:

  • 网站在线转换
  • Postman
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

实战演练

抓取网站:https://developer.mozilla.org…

网站在线转换

1,Chrome 打开开发者选项( f12 )—> network 选项卡 —> 刷新页面,获取请求 —> 找到页面信息对应的请求 (通过请求的名称、后缀和 response 内容来判断)

2,右键,copy —> copy as cURL (bash),注意不是【copy as cURL (cmd)】

3,打开网站,https://curl.trillworks.com/,粘贴 cURL (bash) 到左边 curl command,右边会自动出 Python 代码

4,生成代码如下图

5,print ( response.text ) 就可以直接打印网页源代码啦!

Postman

1,下载 postman ( Chrome 也有个 postman 的插件,操作应该差不多)

2,打开 postman,弹出的界面可以直接关掉

3,import --> paste raw text,在 Chrome 里复制 curl (bash),粘贴到下面的对话框里,点击 import 按钮

4,点击 send,模拟网络请求,下方可查看源代码

5,确保源代码正常后,点击 code

6,左上角可以选择编程语言,右上角复制到剪贴板

大功告成!

其实我本人平时都是用第一种,网站比较稳定,基本没出现过异常;有了这个神器就不用自己再构造请求头了,先一键生成,然后再根据需求调一调就好了,几秒钟就搞定了。

2019-09-03 21:00:01 meiguanxi7878 阅读数 18
  • Python爬虫开发

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 讲师:波波老师 曾就职于百度,任爬虫开发工程师 擅长数据分析和爬虫技术,喜欢研究各种爬虫奇淫巧技,专治各种反爬取疑难杂症 课程简介: "信息时代,数据为王,互联网包含了迄今为止最有用的数据集,并且大部分可以免费公开访问,但是由于数据被嵌入在众多网站的结构和样式中导致难以被复用,应运而生出现了网络爬虫,使用程序自动抓取互联网上的资源。本系列课程将带你开发自动化程序实现数据自动采集,针对众多网站防止数据被获取采取防爬虫方案,课程中包含对防爬策略所有解决方法,专治各种爬虫疑难杂症,使你在爬虫方向真正做到“遇鬼杀鬼,遇神杀神,所向披靡”。同时课程还从源码级别深度剖析流行的爬虫框架,研究如何提高爬虫性能和数据抓取效率。 为什么学习这个课程? 掌握数据意味着掌握未来,现阶段行业内对爬虫工程师的需求日益增长,基于数据分析和挖掘类的创业公司也如雨后春笋般迸发生机,业内基于Python进行爬虫开发也正在成为主流,正所谓选择大于努力,选择对的语言以及正确的方向,才能更容易有更多机会,还在犹豫什么?抓紧搭上这班快速行进的列车。

    3948 人正在学习 去看看 高乐

编程对于任何一个新手来说都不是一件容易的事情,Python对于任何一个想学习的编程的人来说的确是一个福音,阅读Python代码像是在阅读文章,源于Python语言提供了非常优雅的语法,被称为最优雅的语言之一。

python入门时

用得最多的还是各类爬虫脚本,

写过抓代理本机验证的脚本、写过论坛中自动登录自动发贴的脚本

写过自动收邮件的脚本、写过简单的验证码识别的脚本。

这些脚本有一个共性,都是和web相关的,

总要用到获取链接的一些方法,故累积了不少爬虫抓站的经验,

在此总结一下,那么以后做东西也就不用重复劳动了。

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

1、基本抓取网页

get方法

post方法

2.使用代理服务器

这在某些情况下比较有用,

比如IP被封了,或者比如IP访问的次数受到限制等等。

3.Cookies处理

是的没错,如果想同时用代理和cookie,

那就加入proxy_support然后operner改为 ,如下:

4.伪装成浏览器访问

某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。

这时候我们需要伪装成浏览器,

这可以通过修改http包中的header来实现:

5、页面解析

对于页面解析最强大的当然是正则表达式,

这个对于不同网站不同的使用者都不一样,就不用过多的说明。

其次就是解析库了,常用的有两个lxml和BeautifulSoup。

对于这两个库,我的评价是,

都是HTML/XML的处理库,Beautifulsoup纯python实现,效率低,

但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;

lxmlC语言编码,高效,支持Xpath。

6.验证码的处理

碰到验证码咋办?

这里分两种情况处理:

google那种验证码,没办法。

简单的验证码:字符个数有限,只使用了简单的平移或旋转加噪音而没有扭曲的,

这种还是有可能可以处理的,一般思路是旋转的转回来,噪音去掉,

然后划分单个字符,划分好了以后再通过特征提取的方法(例如PCA)降维并生成特征库,

然后把验证码和特征库进行比较。

这个比较复杂,这里就不展开了,

具体做法请弄本相关教科书好好研究一下。

7. gzip/deflate支持

现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,

以VeryCD的主页为例,未压缩版本247K,压缩了以后45K,为原来的1/5。

这就意味着抓取速度会快5倍。

然而python的urllib/urllib2默认都不支持压缩

要返回压缩格式,必须在request的header里面写明’accept-encoding’,

然后读取response后更要检查header查看是否有’content-encoding’一项来判断是否需要解码,很繁琐琐碎。

如何让urllib2自动支持gzip, defalte呢?

其实可以继承BaseHanlder类,

然后build_opener的方式来处理:

8、多线程并发抓取

单线程太慢的话,就需要多线程了,

这里给个简单的线程池模板 这个程序只是简单地打印了1-10,

但是可以看出是并发的。

虽然说Python的多线程很鸡肋

但是对于爬虫这种网络频繁型,

还是能一定程度提高效率的。

9. 总结

阅读Python编写的代码感觉像在阅读英语一样,这让使用者可以专注于解决问题而不是去搞明白语言本身。

Python虽然是基于C语言编写,但是摒弃了C中复杂的指针,使其变得简明易学。

并且作为开源软件,Python允许对代码进行阅读,拷贝甚至改进。

这些性能成就了Python的高效率,有“人生苦短,我用Python”之说,是一种十分精彩又强大的语言。

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

总而言之,开始学Python一定要注意这4点:

1.代码规范,这本身就是一个非常好的习惯,如果开始不养好好的代码规划,以后会很痛苦。

2.多动手,少看书,很多人学Python就一味的看书,这不是学数学物理,你看例题可能就会了,学习Python主要是学习编程思想。

3.勤练习,学完新的知识点,一定要记得如何去应用,不然学完就会忘,学我们这行主要都是实际操作。

4.学习要有效率,如果自己都觉得效率非常低,那就停不停,找一下原因,去问问过来人这是为什么。

2019-04-02 13:58:53 qq_42823043 阅读数 124
  • Python爬虫开发

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 讲师:波波老师 曾就职于百度,任爬虫开发工程师 擅长数据分析和爬虫技术,喜欢研究各种爬虫奇淫巧技,专治各种反爬取疑难杂症 课程简介: "信息时代,数据为王,互联网包含了迄今为止最有用的数据集,并且大部分可以免费公开访问,但是由于数据被嵌入在众多网站的结构和样式中导致难以被复用,应运而生出现了网络爬虫,使用程序自动抓取互联网上的资源。本系列课程将带你开发自动化程序实现数据自动采集,针对众多网站防止数据被获取采取防爬虫方案,课程中包含对防爬策略所有解决方法,专治各种爬虫疑难杂症,使你在爬虫方向真正做到“遇鬼杀鬼,遇神杀神,所向披靡”。同时课程还从源码级别深度剖析流行的爬虫框架,研究如何提高爬虫性能和数据抓取效率。 为什么学习这个课程? 掌握数据意味着掌握未来,现阶段行业内对爬虫工程师的需求日益增长,基于数据分析和挖掘类的创业公司也如雨后春笋般迸发生机,业内基于Python进行爬虫开发也正在成为主流,正所谓选择大于努力,选择对的语言以及正确的方向,才能更容易有更多机会,还在犹豫什么?抓紧搭上这班快速行进的列车。

    3948 人正在学习 去看看 高乐

Python爬虫技术
1. 爬虫技能:

  • . 静态网页数据抓取(urllib/requests/BeautifulSoup/lxml)
  • . 动态网页数据抓取(ajax/phantomjs/selenlum)
  • . 爬虫框架(scrapy)
  • . 补充知识:前端知识、数据库知识、文本处理知识

2. 爬虫环境配置

  • 平台:Windows10
  • Pycharm/Anaconda3 (Python3.5以上)
  • MySQL数据库
  • mongoDB数据库
  • Navicat数据库客户端

3. 爬虫四步基本框架

  • 请求 urllib/requests
  • 解析 BeautifulSoup/lxml
  • 提取 css选择器/xpath表达式/正则表达式
  • 储存 csv/MySQL/mongoDB等

一、请求。
1.用urllib直接请求页面

from urllib.request import urlopen
url = "https://www.python.org/"
response = urlopen(url)
content = response.read()

#需要解码
content = content.decode('utf-8')
print(content)

直接用urlopen打开的方式太直白,有时我们需要委婉一点的请求:

import urllib.request
url = "https://www.python.org/"
request = urllib.request.Request(url)

response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')

print(response.geturl())
print(response.info())
#打印请求状态码
print(response.getcode())
print(type(response))

结果:
在这里插入图片描述
2.requests请求库

import requests
res = requests.get('http://www.python.org/')
print(res.status_code)
print(res.text)#纯文本
#print(res.content)#还有一些图片视频等

太直白多不好,我们还需要设置请求头headers:

import requests
url = 'http://www.python.org/'
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3650.400 QQBrowser/10.4.3341.400'
}
res = requests.get(url,headers=headers)
print(res.text)

二、解析库
1.Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库。他能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。Beautiful Soup会帮你节省数小时甚至数天的工作时间。

import requests
from bs4 import BeautifulSoup
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3650.400 QQBrowser/10.4.3341.400'
}
url = 'http://new.qq.com/'

Soup = BeautifulSoup(requests.get(url=url,headers=headers).text.encode('utf-8'),'lxml')
em = Soup.find_all('h3',attrs={'class':'bold'})
for i in em:
    title = i.a.get_text()
    link = i.a['href']
    print({'标题':title,'连接':link})

在这里插入图片描述
2.解析库lxml

import requests
from lxml import etree

headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3650.400 QQBrowser/10.4.3341.400'
}
url = 'http://www.people.com.cn/'

html = requests.get(url=url, headers=headers)
html.encoding='GBK'
con = etree.HTML(html.text)

title = con.xpath('//ul[@class="list14 top"]/li/a/text()')
link = con.xpath('//ul[@class="list14 top"]/li/a/@href')
for i in zip(title,link):
    print({'标题':i[0],
           '链接':i[1]})

如下图查看编码格式是GB2312,所以需要encoding=‘GBK’.
在这里插入图片描述
找到我们想要抓取的数据的地址:
在这里插入图片描述
结果显示:
在这里插入图片描述

三、提取
1.css选择器:select方法(在上述bs4代码里使用的)
2.xpath表达式(在上述lxml代码里使用的)
3.正则表达式(较全面也复杂)

四、数据的保存
1.CSV库的使用
关于 csv库的使用,我们从写和读两个方面来讲。csv库有四个主要的类 writer,DictWriter,reader,DictReader。

import csv
#待写入的数据
data_1 = ['Tom','Cody','Zack']
data_2 = ['Mike','Bill']

#创建并打开文件
with open('test_writer.csv','w',newline='',encoding='utf-8') as csvfile:
    #获得writer对象 delimiter是分隔符 默认是“,”
    writer = csv.writer(csvfile,delimiter=' ')
    #调用 writer的 writerow方法将 data写入 test_writer.csv文件
    writer.writerow(data_1)
    writer.writerow(data_2)

结果:

Tom Cody Zack
Mike Bill

2019-12-13 16:12:39 weixin_45974628 阅读数 30
  • Python爬虫开发

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 讲师:波波老师 曾就职于百度,任爬虫开发工程师 擅长数据分析和爬虫技术,喜欢研究各种爬虫奇淫巧技,专治各种反爬取疑难杂症 课程简介: "信息时代,数据为王,互联网包含了迄今为止最有用的数据集,并且大部分可以免费公开访问,但是由于数据被嵌入在众多网站的结构和样式中导致难以被复用,应运而生出现了网络爬虫,使用程序自动抓取互联网上的资源。本系列课程将带你开发自动化程序实现数据自动采集,针对众多网站防止数据被获取采取防爬虫方案,课程中包含对防爬策略所有解决方法,专治各种爬虫疑难杂症,使你在爬虫方向真正做到“遇鬼杀鬼,遇神杀神,所向披靡”。同时课程还从源码级别深度剖析流行的爬虫框架,研究如何提高爬虫性能和数据抓取效率。 为什么学习这个课程? 掌握数据意味着掌握未来,现阶段行业内对爬虫工程师的需求日益增长,基于数据分析和挖掘类的创业公司也如雨后春笋般迸发生机,业内基于Python进行爬虫开发也正在成为主流,正所谓选择大于努力,选择对的语言以及正确的方向,才能更容易有更多机会,还在犹豫什么?抓紧搭上这班快速行进的列车。

    3948 人正在学习 去看看 高乐

BeautifulSoup库

一.BeautifulSoup库的下载以及使用

1.下载

pip3 install beautifulsoup4

2.使用

improt bs4

二.BeautifulSoup库解析器

解析器 使用方法 优势 劣势
bs4的HTML解析器 BeautifulSoup(mk,‘html.parser’) Python 的内置标准库

执行速度适中
文档容错能力强 | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差 |
| lxml的HTML解析器 | BeautifulSoup(mk,‘lxml’) | 速度快
文档容错能力强 | 需要安装C语言库 |
| lxml的XML解析器 | BeautifulSoup(mk,‘xml’) | 速度快
唯一支持XML的解析器 | 需要安装C语言库 |
| html5lib解析器 | BeautifulSoup(mk,‘html5lib’) | 最好的容错性
以浏览器的方式解析文档
生成HTML5格式的文档 | 速度慢 |

条件 :

  • bs4的HTML解析器:安装bs4库

  • lxml的HTML解析器:pip3 install lxml

  • lxml的XML解析器:pip3 install lxml

  • html5lib解析器:pip3 install html5lib


推荐Python大牛在线分享技术 扣qun:855408893

领域:web开发,爬虫,数据分析,数据挖掘,人工智能

三.BeautifulSoup类的5种元素

基本元素 简单说明 详细说明
tag 标签 分别用<>与</>来表示开头和结尾
name 标签的名字 用法:.name输出为字符串的形式
attributes 标签里的属性 用法:.attrs输出为字典的形式
navigablestring 标签里的内容 用法:.string可以跨域多个标签层次
comment 标签里面的注释 一种特殊的comment类型
  • 获取标签方法,解析后的网页.标签的名字,如果同时存在多个标签只取第一个
  • 获取标签的父标签.parent
  • 表示标签
  • 当标签为没有属性的时候,我们获得的是个空字典

四.标签树向下遍历

  • .contens:子节点列表,不仅仅包括标签节点,也包括字符串节点例如\n
  • .children:子节点的迭代器类型也包括字符串节点例如\n
  • descendants:子孙节点的迭代类型也包括字符串节点例如\n

五.标签树向上遍历

  • .parent:节点的父亲标签
  • .parents:节点先辈标签的迭代器类型

注意:如果是html的父标签就是他自己,soup本身也是种特殊的标签的他的父标签是空

六.标签树平行遍历

  • .next_sibling:下一个平行标签
  • .previous_sibling:上一个平行标签
  • .next_silbings:迭代器类型,向下所有标签
  • .previous_silbling:迭代器类型,向上所有标签

注意:必须在同一个父节点下才有平行关系,平行遍历获得的对象不一定是标签,也可能是文本,如果上下没来就为空

七.prettify使得解析后页面更加好看

解析后的页面

prettify():会把解析的网页加上\n的文本文档,能使它打印变得更加好看

2019-08-24 16:29:45 KK12345677 阅读数 48
  • Python爬虫开发

    您观看课程学习后 免费入群领取【超全Python资料包+17本学习电子书】 讲师:波波老师 曾就职于百度,任爬虫开发工程师 擅长数据分析和爬虫技术,喜欢研究各种爬虫奇淫巧技,专治各种反爬取疑难杂症 课程简介: "信息时代,数据为王,互联网包含了迄今为止最有用的数据集,并且大部分可以免费公开访问,但是由于数据被嵌入在众多网站的结构和样式中导致难以被复用,应运而生出现了网络爬虫,使用程序自动抓取互联网上的资源。本系列课程将带你开发自动化程序实现数据自动采集,针对众多网站防止数据被获取采取防爬虫方案,课程中包含对防爬策略所有解决方法,专治各种爬虫疑难杂症,使你在爬虫方向真正做到“遇鬼杀鬼,遇神杀神,所向披靡”。同时课程还从源码级别深度剖析流行的爬虫框架,研究如何提高爬虫性能和数据抓取效率。 为什么学习这个课程? 掌握数据意味着掌握未来,现阶段行业内对爬虫工程师的需求日益增长,基于数据分析和挖掘类的创业公司也如雨后春笋般迸发生机,业内基于Python进行爬虫开发也正在成为主流,正所谓选择大于努力,选择对的语言以及正确的方向,才能更容易有更多机会,还在犹豫什么?抓紧搭上这班快速行进的列车。

    3948 人正在学习 去看看 高乐

搜狗微信搜索提供两种类型的关键词搜索,一种是搜索公众号文章内容,另一种是直接搜索微信公众号。通过微信公众号搜索可以获取公众号的基本信息及最近发布的10条文章,今天来抓取一下微信公众号的账号信息(

爬虫

首先通过首页进入,可以按照类别抓取,通过“查看更多”可以找出页面链接规则:

import requests as req
import re

reTypes = r'id="pc_\d*" uigs="(pc_\d*)">([\s\S]*?)</a>'
Entry = "http://weixin.sogou.com/"
entryPage = req.get(Entry)
allTypes = re.findall(reTypes, getUTF8(entryPage))

for (pcid, category) in allTypes:
    for page in range(1, 100):
        url = 'http://weixin.sogou.com/pcindex/pc/{}/{}.html'.format(pcid, page)
        print(url)

        categoryList = req.get(url)
        if categoryList.status_code != 200:
            break

上面代码通过加载更多页面获取加载列表,进而从其中抓取微信公众号详情页面:

reProfile = r'<li id[\s\S]*?<a href="([\s\S]*?)"'
allProfiles = re.findall(reOAProfile, getUTF8(categoryList))
for profile in allProfiles:
    profilePage = req.get(profile)
    if profilePage.status_code != 200:
        continue

进入详情页面可以获取公众号的名称/ID/功能介绍/账号主体/头像/二维码/最近10篇文章等信息:

大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节

点击:python技术分享

注意事项

详情页面链接:http://mp.weixin.qq.com/profile?src=3&timestamp=1477208282&ver=1&signature=8rYJ4QV2w5FXSOy6vGn37sUdcSLa8uoyHv3Ft7CrhZhB4wO-bbWG94aUCNexyB7lqRNSazua-2MROwkV835ilg==

1. 验证码

访问详情页面时有可能需要验证码,自动识别验证码还是很有难度的,因此要做好爬虫的伪装工作。

2. 未保存详情页面链接

详情页面的链接中有两个重要参数:timestamp & signature,这说明页面链接是有时效性的,所以保存下来应该也没用;

3. 二维码

二维码图片链接同样具有时效性,因此如需要最好将图片下载下来。

用 Flask 展示结果

最近 Python 社区出现了一款异步增强版的 Flask 框架:Sanic,基于uvloophttptools,可以达到异步、更快的效果,但保持了与 Flask 一致的简洁语法。虽然项目刚起步,还有很多基本功能为实现,但已经获得了很多关注(2,222 Star)。这次本打算用抓取的微信公众号信息基于 Sanic 做一个简单的交互应用,但无奈目前还没有加入模板功能,异步的 redis 驱动也还有 BUG 没解决,所以简单尝试了一下之后还是切换回 Flask + SQLite,先把抓取结果呈现出来,后续有机会再做更新。

安装 Sanic

Debug Sanic

Flask + SQLite App

from flask import g, Flask, render_template
import sqlite3

app = Flask(__name__)
DATABASE = "./db/wx.db"

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = sqlite3.connect(DATABASE)
    return db
@app.teardown_appcontext
def close_connection(exception):
    db = getattr(g, '_database', None)
    if db is not None:
        db.close()

@app.route("/<int:page>")
@app.route("/")
def hello(page=0):
    cur = get_db().cursor()
    cur.execute("SELECT * FROM wxoa LIMIT 30 OFFSET ?", (page*30, ))
    rows = []
    for row in cur.fetchall():
        rows.append(row)
    return render_template("app.html", wx=rows, cp=page)

if __name__ == "__main__":
    app.run(debug=True, port=8000)
没有更多推荐了,返回首页