在Python爬虫开发中,掌握一些关键的库可以极大地提高效率和效果。以下是10个必须掌握的Python爬虫库,每个库都附带了简短的代码示例,以帮助理解其用法。
- Requests
用于发送HTTP请求。
import requests
response = requests.get('https://api.example.com/data')
print(response.json())
- BeautifulSoup
用于解析HTML和XML文档。
from bs4 import BeautifulSoup
html_doc = "<html><head><title>Page Title</title></head><body><p>This is a paragraph.</p></body></html>"
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.title.string)
- lxml
高性能的HTML/XML解析库。
from lxml import etree
html_content = "<html><body><h1>Hello, world!</h1></body></html>"
tree = etree.HTML(html_content)
print(tree.xpath('//h1/text()')[0])
- Selenium
用于自动化Web浏览器操作。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.example.com')
print(driver.title)
driver.quit()
- Scrapy
一个快速的高级Web抓取和网页抓取框架。
(Scrapy通常需要创建一个项目,但这里提供一个简单的示例来说明其Spider的用法)
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
start_urls = ['https://www.example.com']
def parse(self, response):
title = response.css('title::text').get()
yield {'title': title}
# 运行时需要scrapy crawl example
- PyQuery
像jQuery一样解析HTML文档。
from pyquery import PyQuery as pq
html_doc = "<html><body><h1>Hello, world!</h1></body></html>"
doc = pq(html_doc)
print(doc('h1').text())
- Twill
一个简单的Web浏览工具,用于自动化Web交互。
from twill.commands import *
go('https://www.example.com')
show()
fv("form_name", "field_name", "value")
submit()
show()
- RoboBrowser
一个简单、Python风格的库,用于浏览Web而无需独立的浏览器。
from robobrowser import RoboBrowser
browser = RoboBrowser(history=True)
browser.open('https://www.example.com')
form = browser.get_form(id='login-form')
form['username'] = 'user'
form['password'] = 'pass'
browser.submit_form(form)
print(browser.url)
- MechanicalSoup
用于与Web站点自动交互的Python库。
from mechanicalsoup import Browser
br = Browser()
br.open("https://www.example.com/login")
br.select_form('login')
br["username"] = "user"
br["password"] = "pass"
br.submit()
print(br.url)
- Splash
用于渲染JavaScript的Scrapy中间件,基于Splash(一个JavaScript渲染服务)。
(需要安装Splash服务,并在Scrapy中配置)
import scrapy
from scrapy_splash import SplashRequest
class ExampleSplashSpider(scrapy.Spider):
name = 'example_splash'
start_urls = ['https://www.example.com']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse, args={'wait': 2})
def parse(self, response):
# 处理渲染后的页面
print(response.text)
# 需要在settings.py中配置Splash服务
注意:上述代码示例可能需要根据实际情况进行调整,特别是涉及网络请求和表单提交的部分。此外,一些库(如Scrapy和Splash)需要额外的配置和依赖项。在实际项目中,请确保按照官方文档进行安装和配置。