用python写网络爬虫

识别网站所用技术

  1. 安装模块

    pip install builtwith

  2. 进行分析

python 复制代码
>>> import builtwith
>>> builtwith.parse('http://www.baidu.com')
{'javascript-frameworks': ['Prototype', 'RequireJS', 'jQuery']}

寻找网站所有者

有些网站所有者会封禁网络爬虫 所以需要控制下载速度,可以使用WHOIS协议查询域名的注册者

python-whois · PyPI

通过命令行下载

python 复制代码
pip install python-whois

执行

python 复制代码
>>> import whois
>>> print whois.whois('baidu.com')

编写第一个网络爬虫

1. 下载网页

要想爬取一个网页,首先要将其下载下来

py2写法:

python 复制代码
import urllib2

def download(url) :
  
    return urllib2.urlopen(url).read()

py3写法

python 复制代码
import urllib.request

# 发起请求
response = urllib.request.urlopen("https://www.baidu.com")
data = response.read()

# 保存到文件
with open("output.html", "wb") as f:
    f.write(data)

2. 设置用户代理

在 Python 3 中,使用 urllib.request 模块发送 HTTP 请求时,默认的用户代理(User-Agent)是 Python-urllib/3.x(其中 x 是你使用的 Python 3 的具体版本号)。

例如,如果你使用 Python 3.8,默认的用户代理字符串可能是 Python-urllib/3.8。

这个默认用户代理在某些网站上可能会被识别为爬虫并被拒绝访问。如果你需要模拟浏览器行为,通常需要自定义用户代理,例如:

python 复制代码
import urllib.request

url = "https://www.baidu.com"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
content = response.read()

上面代码示例中设置的用户代理(User-Agent)是:

python 复制代码
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36

这个用户代理字符串表示的是 Windows 10 操作系统上的 Chrome 91 浏览器。这种用户代理是非常典型的现代浏览器标识,通常用于模拟真实的浏览器访问,以避免被网站识别为爬虫或自动化程序而被拒绝访问。

相关推荐
喵手4 分钟前
Python爬虫实战:京东/淘宝搜索多页爬虫实战 - 从反爬对抗到数据入库的完整工程化方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·京东淘宝页面数据采集·反爬对抗到数据入库·采集结果csv导出
lsx2024067 分钟前
Python3 SMTP发送邮件教程
开发语言
懈尘8 分钟前
从 Java 1.7 到 Java 21:逐版本深入解析新特性与平台演进
java·开发语言
凉辰11 分钟前
使用uni.createInnerAudioContext()播放指定音频(踩坑分享功能)
开发语言·javascript·音视频
hello 早上好13 分钟前
05_Java 类加载过程
java·开发语言
B站_计算机毕业设计之家21 分钟前
猫眼电影数据可视化与智能分析平台 | Python Flask框架 Echarts 推荐算法 爬虫 大数据 毕业设计源码
python·机器学习·信息可视化·flask·毕业设计·echarts·推荐算法
PPPPPaPeR.25 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
橙露28 分钟前
Java并发编程进阶:线程池原理、参数配置与死锁避免实战
java·开发语言
froginwe1128 分钟前
C 标准库 - `<float.h>`
开发语言
JaydenAI29 分钟前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain