这篇文章主要介绍怎么快速爬取网站数据,具体原理和网络只是作为TODO,后续会补充。
基础概念
爬虫原理
最简单的爬虫原理就是通过HTTP请求获得网页内容,然后从获取的网页内容当中解析想要的数据,所以核心分为网络请求和数据解析两部分。TODO:介绍复杂的请求情况与多样的解析手段
爬虫工具
上面提到爬虫主要分为网络请求和数据解析两个部分,第一部分的工具可以使用requests库,第二部分的工具可以使用beautifulsoup库。TODO:介绍其他工具的使用场景
网页结构
网页结构主要分为HTML、CSS、JS三部分,其中HTML是网页的骨架,CSS是网页的样式,JS是网页的交互。其中的HTML是要关注的主要部分,因为网页内容信息基本都在HTML当中TODO:介绍HTML的基本结构
实战
爬取网页
import requests
from bs4 import BeautifulSoup
#以爬取百度首页为例
url = 'https://www.baidu.com'
#获取HTML内容
def get_html(url):
#这一步精简了很多过程,包括网络请求、状态码判断、编码处理等,直接假设网络请求成功
response = requests.get(url)
return response.text
def get_data(html):
#解析HTML内容
soup = BeautifulSoup(html, 'html.parser')
#假设要获取整个页面的所有链接
#需要实际查看网页源码,找到链接所在的标签和属性,基础的可以按f12打开浏览器开发者工具,然后用左上角的选择器找到对应的标签,然后右键复制选择器
#比如看到链接都在href属性的a标签当中
links = soup.find_all('a')
links = [link.get('href') for link in links]
#或者直接用CSS选择器
links = soup.select('a')
links = [link.get('href') for link in links]
#也可以用lxlm的xpath
from lxml import etree
html = etree.HTML(html)
links = html.xpath('//a/@href')
#上述的方法定位需要进入浏览器开发者工具查看源码,然后找到对应的标签和属性,然后用对应的方法提取
#或者直接用正则表达式,因为提取之后的内容是字符串,所以可以用正则表达式
import re
links = re.findall(r'<a.*?href="(.*?)".*?>', html)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2128099421@qq.com