如何用python在网上爬取资料
用Python爬网页,何用最省事的网上组合是 先装库。网上打开终端敲: 如果你要爬的资料数据藏在JavaScript渲染的页面里,比如微博或者某些电商网站,何用这两个库就不够用了,网上得请出 下面这段代码爬取一个模拟的书籍列表页: 实际爬取时你会撞上几个坑。第一,网站反爬。最简单的应对是加请求头,伪装成浏览器: 第二,请求太频繁会被封IP。加个 数据量大了之后,建议把结果存下来。CSV是最简单的选择: 想爬多个页面就观察URL规律。比如 最后说一句实在话:爬虫本身不复杂,复杂的是目标网站的各种限制。我爬过一个小众论坛,对方用了Cloudflare防护,折腾半天最后换了 requests + BeautifulSoup。前者负责把网页源码抓下来,资料后者负责从一堆HTML里把你要的何用数据抠出来。我最早爬的网上是豆瓣电影Top250,代码不到20行,资料跑完就能拿到250部电影的何用标题、评分和链接。网上那种“机器替我干活”的资料感觉,比手动复制粘贴爽太多。何用pip install requests beautifulsoup4 selenium 或者直接分析XHR请求。资料新手建议从静态页面练手,别一上来就啃硬骨头。import requests from bs4 import BeautifulSoup url = "http://books.toscrape.com/" resp = requests.get(url) resp.encoding = 'utf-8' soup = BeautifulSoup(resp.text, 'html.parser') books = soup.find_all('article', class_='product_pod') for book in books: title = book.h3.a['title'] price = book.find('p', class_='price_color').text print(title, price) requests.get() 拿到的是服务器返回的原始HTML。resp.encoding 这行别省,有些网站不声明编码,中文会变乱码。BeautifulSoup 解析之后,用 find_all 定位所有书籍卡片,再逐层往下取标题和价格。逻辑很直白——就像你在浏览器里按F12看元素结构,然后告诉Python“帮我找所有class是product_pod的article标签”。headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } resp = requests.get(url, headers=headers) time.sleep(1) 在每次请求之间,别像饿狼扑食一样猛发请求。第三,页面结构可能变,今天能跑的代码下个月就报错,所以写爬虫要有“随时修”的心理准备。import csv with open('books.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['标题', '价格']) for book in books: writer.writerow([book.h3.a['title'], book.find('p', class_='price_color').text]) page-1.html、page-2.html,写个循环拼接URL就行。遇到用POST请求加载数据的网站,把 requests.get 换成 requests.post,参数塞进 data 字典里。cloudscraper 库才搞定。所以别指望一套代码通吃所有网站,灵活换工具才是常态。爬之前看一眼网站的 robots.txt,别把人家服务器搞崩,这是基本礼貌。
-
上一篇
-
下一篇
- 随机阅读
- 搜索
-
- 友情链接
-