使用requests获取HTML源码,BeautifulSoup解析结构,lxml+XPath精确提取,Playwright处理JS渲染页面,并添加User-Agent、延时等反爬措施。

一、使用requests库获取网页源码
requests库用于发送HTTP请求,获取网页的原始HTML文本,是后续解析的基础步骤。它轻量、稳定,适合处理静态页面。
1、在终端中执行pip install requests安装依赖库。
2、编写Python脚本,导入requests模块。
3、调用requests.get(url)方法发送GET请求,其中url为待爬取的目标网页地址。
立即学习“Python免费学习笔记(深入)”;
4、检查响应状态码,若response.status_code == 200,则表示请求成功。
5、使用response.text获取HTML字符串内容,或用response.content获取字节流(适用于含中文的页面,可配合指定编码解码)。
二、使用BeautifulSoup解析HTML结构
BeautifulSoup是一个HTML/XML解析库,能将原始HTML转换为可遍历的对象树,便于定位和提取特定标签及属性。
1、执行pip install beautifulsoup4安装库。
2、导入BeautifulSoup类,并传入HTML内容与解析器(推荐"html.parser"或"lxml")。
3、使用soup.find()查找第一个匹配的标签,例如soup.find("title")获取标题。
4、使用soup.find_all()获取所有匹配元素,例如soup.find_all("a", class_="link")提取指定类名的链接。
5、对返回的Tag对象调用.get_text()提取纯文本,或访问.attrs获取属性字典,从中提取href或src等值。
三、使用lxml与XPath精确提取数据
lxml是高性能XML/HTML处理库,支持XPath表达式,语法灵活且执行效率高,特别适合嵌套深、结构复杂的网页。
1、运行pip install lxml完成安装。
2、导入lxml.html模块,调用html.fromstring(html_content)将HTML字符串转为可查询的文档对象。
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
3、使用tree.xpath()方法执行XPath查询,例如tree.xpath('//div[@class="content"]/p/text()')提取指定div内所有段落文本。
4、XPath支持索引(如[1])、属性过滤(如@id="main")、层级关系(如//ul/li/a/@href)等多种定位方式。
5、对XPath返回的列表结果进行遍历,用strip()清理空白字符,确保数据整洁。
四、处理JavaScript渲染的动态页面
当目标网页内容由JavaScript动态生成时,requests无法获取最终渲染结果,需借助浏览器自动化工具执行JS并抓取DOM。
1、安装ChromeDriver或使用playwright内置浏览器,执行pip install playwright后运行playwright install chromium。
2、导入playwright.sync_api.sync_playwright,启动Chromium浏览器实例。
3、调用page.goto(url)访问网页,并可选使用page.wait_for_timeout(2000)等待JS执行完成。
4、使用page.content()获取当前完整HTML,或直接调用page.query_selector_all()按CSS选择器提取元素。
5、对每个匹配元素调用.inner_text()或.get_attribute("href")获取所需字段。
五、添加基础反爬应对措施
多数网站会检测非浏览器请求头或高频访问行为,简单添加请求头与延时可显著提升成功率。
1、构造headers字典,包含"User-Agent"字段,值设为常见浏览器标识,例如"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"。
2、在requests.get()中传入headers=headers参数,使请求更接近真实用户。
3、在循环爬取多个URL时,每次请求前调用time.sleep(1)暂停1秒,避免触发频率限制。
4、对于需维持登录态的页面,使用requests.Session()对象复用Cookie,提升会话连续性。
5、遇到403 Forbidden响应时,应立即检查User-Agent是否被屏蔽,并尝试更换为移动设备UA。









