本文将介绍入门Python爬虫的基础知识点,并给出相应的代码示例。通过学习本文,读者将获得关于Python爬虫的基础知识和操作经验。
一、请求与响应
在进行网页爬取时,我们需要向服务器发送请求,并接收服务器返回的响应。Python提供了多种库来实现这一功能,常用的有urllib和requests。
使用urllib库发送GET请求的示例代码如下:
import urllib.request
response = urllib.request.urlopen('http://www.example.com')
html = response.read().decode('utf-8')
print(html)
使用requests库发送GET请求的示例代码如下:
import requests
response = requests.get('http://www.example.com')
html = response.text
print(html)
二、解析HTML
爬取到的网页内容通常是HTML格式的,我们需要从中提取出所需的数据。Python提供了多种库来解析HTML,如BeautifulSoup和lxml。
使用BeautifulSoup库解析HTML的示例代码如下:
from bs4 import BeautifulSoup
html = 'Hello, World!
'
soup = BeautifulSoup(html, 'html.parser')
print(soup.h1.text)
使用lxml库解析HTML的示例代码如下:
from lxml import etree
html = 'Hello, World!
'
tree = etree.HTML(html)
print(tree.xpath('//h1/text()')[0])
三、保存数据
在爬取到数据后,我们需要将其保存下来供后续使用。Python提供了多种方法来保存数据,如保存为文本文件、CSV文件、Excel文件或数据库。
将数据保存为文本文件的示例代码如下:
data = 'Hello, World!'
with open('data.txt', 'w') as f:
f.write(data)
将数据保存为CSV文件的示例代码如下:
import csv
data = [['Name', 'Age'], ['Alice', 20], ['Bob', 30]]
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
将数据保存到Excel文件的示例代码如下:
import pandas as pd
data = {'Name': ['Alice', 'Bob'], 'Age': [20, 30]}
df = pd.DataFrame(data)
df.to_excel('data.xlsx')
将数据保存到数据库的示例代码如下:
import sqlite3
conn = sqlite3.connect('data.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER)''')
cursor.execute('''INSERT INTO users (name, age)
VALUES (?, ?)''', ('Alice', 20))
conn.commit()
conn.close()
四、处理网页链接
在爬取网页时,经常会遇到相对链接和绝对链接的转换、链接合并等问题。Python提供了多种方法来处理网页链接,如urljoin和urllib.parse。
使用urljoin函数处理网页链接的示例代码如下:
from urllib.parse import urljoin
base_url = 'http://www.example.com'
relative_url = '/about.html'
absolute_url = urljoin(base_url, relative_url)
print(absolute_url)
使用urllib.parse模块处理网页链接的示例代码如下:
from urllib.parse import urlparse, urlunparse
url = 'http://www.example.com/about.html'
parsed_url = urlparse(url)
new_parsed_url = parsed_url._replace(netloc='new.example.com')
new_url = urlunparse(new_parsed_url)
print(new_url)
五、处理动态网页
有部分动态生成的网页内容无法直接通过请求获取,此时可以使用Selenium库进行模拟浏览器操作。Selenium可以模拟浏览器行为,如点击按钮、填写表单等。
使用Selenium模拟浏览器操作的示例代码如下:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.example.com')
element = driver.find_element_by_tag_name('h1')
print(element.text)
driver.quit()
六、处理验证码
有些网站为了防止机器人爬取,会使用验证码进行验证。我们可以使用第三方库来自动识别验证码,如tesseract和pytesseract。
使用pytesseract识别验证码的示例代码如下:
import pytesseract
from PIL import Image
image = Image.open('captcha.png')
code = pytesseract.image_to_string(image)
print(code)
七、使用代理
在进行大规模爬取时,为了防止被服务器封禁IP,我们可以使用代理来隐藏真实IP地址。Python提供了多种库来使用代理,如requests和proxies。
使用代理进行爬取的示例代码如下:
import requests
proxies = {'http': 'http://127.0.0.1:8888'}
response = requests.get('http://www.example.com', proxies=proxies)
print(response.text)
八、定时任务
有些爬虫需要定时执行,可以使用第三方库来实现定时任务的功能,如APScheduler。
使用APScheduler实现定时任务的示例代码如下:
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()
def job():
print('Hello, World!')
scheduler.add_job(job, 'interval', seconds=5)
scheduler.start()
本文仅介绍了入门Python爬虫的一些基础知识点和操作经验,希望读者能够通过学习本文,进一步深入研究和应用爬虫技术。