基于urllib的简单爬虫

本文介绍了Python网络爬虫的基础知识,包括使用urllib访问互联网并爬取HTML,实现有道翻译API的调用,以及处理隐藏用户标识和异常。还涉及到了代理服务器的使用,并提供了异常处理的示例,最后简单提及了Scrapy爬虫框架在数据提取中的应用。
摘要由CSDN通过智能技术生成

本系列来源于B站视频。UP主为IT搬運工,系列视频为[小甲鱼]零基础入门学习python点我直达

什么是爬虫

又称为网页蜘蛛,在网页上获取所需要的信息。

python如何访问互联网

url + lib= urllib

URL

协议://IP地址/资源具体地址

lib

urllib

实战

爬取html

爬取网页html代码

import urllib.request
#import ssl
#ssl._create_default_https_context = ssl._create_unverified_context
response = urllib.request.urlopen("http://www.fishc.com") #网址
html = response.read()
html = html.decode("utf-8") #改为utf-8的编码
print(html) #打印消息体
print(response.info()) #打印请求信息
print(response.getcode()) #打印请求返回码

有道翻译

通过有道翻译api实现输入内容的翻译:

import urllib.request
import urllib.parse
import json

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
content = input('请输入需要翻译的内容:')
data = {'i': content, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb',
        'salt': '16103741503935', 'sign': '52bbd584e410db9268738912201819eb', 'lts': '1610374150393',
        'bv': '4f7ca50d9eda878f3f40fb696cce4d6d', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME'}

data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url, data)

html = response.read().decode('utf-8')
target = json.loads(html)
print(target["translateResult"][0][0]['tgt'])

实现结果

img

隐藏

python在进行post请求时,会将post请求的用户标识为python,因此可能会被服务器拒绝连接,所以需要修改用户标识。

head = {
    'User-Agent': '自己浏览器字段'}
req = urllib.request.Request(url, data, head)  
#以下为urlopen  #略过,见上节
#以上为urlopen
print(req.headers)
#修改http 的请求头中的User-Agent字段为自己浏览器的字段

循环翻译请求

import urllib.request
import urllib.parse
import json
import time

while True:
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

    '''
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\
    Chrome/87.0.4280.88 Safari/537.36'}
    '''

    content = input('请输入需要翻译的内容:(输入"q!"退出程序)')
    if content == 'q!':
        break
    data = {'i': content, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb',
            'salt': '16103741503935', 'sign': '52bbd584e410db9268738912201819eb', 'lts': '1610374150393',
            'bv': '4f7ca50d9eda878f3f40fb696cce4d6d', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTlME'}

    data = urllib.parse.urlencode(data).encode('utf-8')
    #req = urllib.request.Request(url, data, head)
    req = urllib.request.Request(url, data)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\
    Chrome/87.0.4280.88 Safari/537.36')
    response = urllib.request.urlopen(url, data)

    html = response.read().decode('utf-8')
    target = json.loads(html)
    print(target["translateResult"][0][0]['tgt'])
    time.sleep(3)
    #print(req.headers)

运行结果

请输入需要翻译的内容:(输入"q!"退出程序)刷漆
Brush paint
请输入需要翻译的内容:(输入"q!"退出程序)帅气
handsome
请输入需要翻译的内容:(输入"q!"退出程序)q!

进程已结束,退出代码0

代理

步骤:

1,参数时一个字典{‘类型’:‘代理ip’:‘端口号’}

proxy_support = urllib.request.ProxyHandler({})

2,定制、创建一个opener

opener = urllib.request.build_opener(proxy_support)

3a,安装opener

urllib.request.install_opener(opener)

3b,调用opener

opener.open(url)

import re

#search 用于正则表达式查找第一次出现的位置
print(re.search(r'Moliam', 'I am Moliam'))
# .(英文句号):代表除了换行符的任何字符,所以返回0,匹配为I
print(re.search(r'.', 'I am Moliam'))
print(re.search(r'M.', 'I am Moliam'))
#加上\去除.的通配符
print(re.search(r'\.', 'I am Moliam.'))
#\d 匹配任何单个数字  数字对于字符串只有0-9
print(re.search(r'\d\d\d', 'I am Moliam.100'))
#[] 字符类:只要匹配字符类中的任何元素都算匹配,大小写敏感
print(re.search(r'[aeiou]', 'I am Moliam.100'))
# - 表示范围
print(re.search(r'[a-z]', 'I am Moliam.100'))
# {} 限定重复次数  下例中b要有且只能重复3次
print(re.search(r'ab{3}c', 'abbbc'))
# 3-10次重复  均可算匹配成功
print(re.search(r'ab{3,10}c', 'abbbc'))
#寻找字符串中的0-255  | 为逻辑或   必须写3位
print(re.search(r'[01]\d\d|2[0-4]\d|25[0-5]', '233'))
print(re.search(r'[01]\d\d|2[0-4]\d|25[0-5]', '3'))

运行结果

<re.Match object; span=(5, 11), match=‘Moliam’>
<re.Match object; span=(0, 1), match=‘I’>
<re.Match object; span=(5, 7), match=‘Mo’>
<re.Match object; span=(11, 12), match=’.’>
<re.Match object; span=(12, 15), match=‘100’>
<re.Match object; span=(2, 3), match=‘a’>
<re.Match object; span=(2, 3), match=‘a’>
<re.Match object; span=(0, 5), match=‘abbbc’>
<re.Match object; span=(0, 5), match=‘abbbc’>
<re.Match object; span=(0, 3), match=‘233’>
None

菜鸟教程正则表达式的详细介绍

异常处理

URLError
HTTPError

Scrapy

提取结构性数据的框架

  • 创建一个Scrapy项目
  • 定义Item容器
  • 编写爬虫
  • 存储内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值