目录
1. 为什么需要爬虫
爬虫是重要的数据获取方式,理论上任何网上公开可视的数据都是可以获取到的。在学术研究等场合中除了使用直接的数据集以及各种搜索引擎提供的API外,就是需要自己上网爬虫,因此掌握合理的爬虫方法非常重要,下面主要介绍3种常用的Python爬虫库,教你轻松入门爬虫技术。
2. 怎么进行爬虫
2.1 Requests
学过《计算机网络》的都知道浏览器通过给服务器发报文的方式获得网页内容,因此自然地,我们也可以假装浏览器向服务器发送请求(request)获得数据,下面是一个简单的例子:
import requests
# 发送 GET 请求
url = 'https://example.com' # 目标主页的URL
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
print("请求成功")
print(response.text) # 输出网页内容
else:
print(f"请求失败,状态码:{response.status_code}")
requests.get()应该是我们使用requests库进行爬虫中用的最多的方法了,“200”是代表成功响应的状态码,其他常见的还有“404”:文件不存在,“502”:服务器错误,“304”:本地缓存的资源未改变,可以直接用本地的资源,"301":已经永久地换成新的URL,请使用新的URL进行请求。另外为了装地更像浏览器一点避免被识别出来,我们还可以在最前面加上请求头(headers)
headers = {'User-Agent': 'Mozilla/5.0'}
2.2 BeautifulSoup
使用requests库抓取了数据后,我们可以用beautifulsoup库进行解析,通常我们是从HTML、XML和JSON格式的文档中解析数据,这里最重要的就是找到我们想要的数据对应的标签。例如在下面这个HTML中我们想获得所有的项目名称,根据文档特点我们采用find_all函数找所有标签为<li>的数据项。
from bs4 import BeautifulSoup
# 示例 HTML
html_doc = """
<html>
<head>
<title>Self Page</title>
</head>
<body>
<h1>Welcome to My page</h1>
<h2>My Projects</h2>
<ul>
<li><a href="#">Project1</a></li>
<li><a href="#">Project2</a></li>
<li><a href="#">Project3</a></li>
</ul>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'lxml')
projects = soup.find_all('li')
for project in paragraphs:
print(project.text)
# 输出:
# project1
# project2
# project3
2.3 Scrapy
虽然requests已经是一个非常流行的python库了,但是它只适合页面级爬虫且性能有限,因此这里进一步介绍下Scrapy框架,它可以用于网站级别的爬虫,适用的数据尺寸更大。Scrapy的结构如下图所示较为复杂,但是由于很多都是封装好的,我们不用管,感兴趣地可以深入了解下,这里主要介绍下创建项目的实战方法。
首先在命令行输入以下命令进行下载安装 :
pip install scrapy
打开pycharm,新建一个项目Settings-New Project,定义项目名称(例如ScrapyDemo),打开终端terminal,进入项目的根目录,输入:
scrapy startproject MyScrapyProject
#<项目名称为MyScrapyProject>
创建好后接着在终端输入:
cd MyScrapyProject
#scrapy genspider <爬虫名称> <目标网站域名>
#例如
scrapy genspider example example.com
这会在 spiders
文件夹中生成一个名为 example.py
的爬虫文件,这也是爬虫的核心代码文件,接下来的爬取逻辑主要在这个文件中的parse函数中实现。
#example.py文件
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
allowed_domains = ['example.com']
start_urls = ['http://example.com/']
def parse(self, response):
pass
总体项目结构:
项目名字(NewProject:ScrapyDemo)
项目的名字(MyScrapyProject)
spiders文件夹(存储的是爬虫文件)
_init_.py
自定义的爬虫文件(example.py) 核心功能文件
_init_.py
items.py 定义数据结构的地方 爬虫的数据都包含哪些
middlewares 中间件 代理
pipelines.py 管道 用来处理下载的数据
settings 配置文件 robots协议 ua定义等
如果想要进行小的尝试,看看自己有没有成功实现scrapy的功能,可以参考这篇博客爬虫---scrapy爬虫框架(详细+实战)-CSDN博客的第四部分项目实战,它简单地实现了一个对当当网站图书的名称+价格+图片的爬取,步骤讲的也很详细,我自己试了下是没问题的。唯二需要注意的是(1)创建爬虫项目时不需要进入spiders文件夹下,直接cd scrapy_dangdang就好了,pycharm也会给你提示的(2)它的代码爬取的是前100页的图书数据,一页大概有60本左右,爬取时间较长,如果只是尝试的话可以改小点dang.py的page变量大小,如果成功得到book.json数据就没什么问题了。
3. 爬虫的注意事项
爬虫一直还是一个具有争议性的行为,因此做的时候最重要的还是要合法合规。对于数据内容,首先网站明令禁止爬取的数据我们就不要碰了,牵扯到用户隐私的数据也要慎重爬取;对于爬取过程,尽量不要选择一些高峰期频繁发送请求,把本来就快无法满足正常用户需求的服务器搞瘫痪;对于数据用途,做一些简单有益的学术研究、数据分析是可以的,但是不能恶意攻击,侵犯隐私或是窃取对手公司的商业机密造成不正当竞争。
这里再介绍一个非常著名的Robots.txt协议文件,它是搜索引擎中访问网站的时候要查看的第一个文件,上面规定了哪些内容是不被允许爬取的,爬虫时应严格遵守该协议,通过查询下面的网址即可查看目标网站的robots协议。
#example.com需要被替换成目标网址
https://www.example.com/robots.txt
以上就是全部内容了,讲的比较粗略只是个简单介绍,如果对友友们有帮助,希望多多关注点赞。如有不足,也非常欢迎批评指正,共同进步。后续可能考虑做一些实战项目以及针对requests和scrapy无法处理JS渲染的动态网页问题再介绍下Selenium以及Scrapy+Splash方法。
参考资料:
Python网络爬虫与信息提取 北京理工大学:嵩天_哔哩哔哩_bilibili
标签:Python,py,Scrapy,BeautifulSoup,scrapy,requests,爬虫,数据,example From: https://blog.csdn.net/weixin_72032564/article/details/142883737