python爬取文字如何翻页_python爬虫实战翻页,之,爬取,糗,事,百科,段子

近期在翻看视频学习爬虫,把每天学习的内容记录下~如有一起学习的爬友就更好了。

简单基础

1、正则表达式

用途:用于信息筛选提取

1、全局匹配函数使用格式:

re.compole(‘正则表达式’).findall(‘源字符串’)

普通字符abc 正常匹配-abc 原子

\w 匹配字母、数字、下划线 原子

\W 匹配除字母、数字、下划线 原子

\d 匹配十进制数字 原子

\D 匹配除十进制数字 原子

\s 匹配空白字符 原子

\S 匹配除空白字符 原子

[ab89x] 原子表,匹配[]内的ab89x中的任意一个

[^ab89x] 原子表,匹配除ab89以外的任意一个字符

2、字符匹配

. 匹配除换行外任意一个字符

^ 匹配开始位置

$ 匹配结束位置

* 前一个字符出现任意次(0,1,或多次)

? 前一个字符出现最多1次(0,1)

+ 前一个字符出现最少一次(1,多次)

{n} 前一个字符出现n次

{n,} 前一次字符出现最少n次

{n,m} 前一个字符出现n~m次

| 模式选择符或

() 模式单元:想提取出什么内容,就在正则中用小括号括起来

3、贪婪模式&懒惰模式

贪婪模式:尽可能多的匹配(默认模式)

懒惰模式:尽可能少的匹配

*? +?

4、模式修正符,在不改变正则表达式的情况下,通过模式修正符使匹配结果发生改变

re.S 让.也可以匹配多行

re.I 匹配时忽略大小写

2、信息筛选工具

正则表达式、xpath表达式、Beautiful soup…

XPath:

/ 逐层提取

text() 提取标签下面的文本

//标签名** 提取所有名为**的标签

//标签名[@属性=‘属性值’] 提取属性为XX的标签

@属性名 取某个属性值

urllib基础

需要导入的模块:

import urllib

import urllib.request

将内容爬到内存中

url = 'http://www.jd.com'

data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')

print(len(data))

将内容爬到硬盘的文件中

urllib.request.urlretrieve(url, filename = 'D:\\software\\sublime\\python-workspace\\practice\\base\\jd.html')

用户代理:打开一个网页,f12

1dd1e3200ecb15da4457c92ff414eaba.png

User-Agent:用户代理,标识浏览器访问

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36

浏览器伪装:先伪装opener,再伪装urlopen

url = 'https://www.qiushibaike.com'

opener = urllib.request.build_opener()

UA = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36')

opener.addheaders = [UA]

将伪装好的opener安装为全局

urllib.request.install_opener(opener)

data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')

print(len(data))

用户代理池

如果用同一个浏览器频繁访问某网站,可能会被认为是爬虫,用多个浏览器标识访问

import random

url = 'https://www.qiushibaike.com'

userpools = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363',

'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko']

def UA():

opener = urllib.request.build_opener()

thisua = random.choice(userpools)

ua = ('User-Agent', thisua)

opener.addheaders = [ua]

urllib.request.install_opener(opener)

print('当前使用的UA:', thisua)

for i in range(0,10):

UA()

data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')

print(len(data))

实战

目标站点:https://www.qiushibaike.com

目标数据:热门段子

要求:实现自动翻页

分析:

1)取段子数据:ctl+u查看网页源码,ctl+f(搜索),找标签,span太多(不一定能找到,不能精确筛选),找出段子数和标签数匹配的标签

793d699b737e1ba46dc5e7814071a81b.png

2)翻页:

观察网址的变化:

第一页:https://www.qiushibaike.com/text/

第二页:https://www.qiushibaike.com/text/page/2/

第三页:https://www.qiushibaike.com/text/page/3/

。。。

第10页:https://www.qiushibaike.com/text/page/10/

猜测第一页是否:https://www.qiushibaike.com/text/page/1/可以访问—可以

import urllib

import urllib.request

import random

import re

url = 'https://www.qiushibaike.com'

userpools = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363',

'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko']

def UA():

opener = urllib.request.build_opener()

thisua = random.choice(userpools)

ua = ('User-Agent', thisua)

opener.addheaders = [ua]

urllib.request.install_opener(opener)

print('当前使用的UA:', thisua)

'''

第一页:https://www.qiushibaike.com/text/

第二页:https://www.qiushibaike.com/text/page/2/

第三页:https://www.qiushibaike.com/text/page/3/

...

第10页:https://www.qiushibaike.com/text/page/10/

'''

for i in range(1, 10):

url = 'https://www.qiushibaike.com/text/page/%s/' % i

UA()

try:

data = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')

pat = '

.*? (.*?).*?
'

duanzi = re.compile(pat, re.S).findall(data)

print(url)

for j in range(0, len(duanzi)):

print(duanzi[j])

print('**************************************************')

except Exception as err:

pass

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值