下面是使用Python采集脚本之家电子书资源并自动下载到本地的实例脚本攻略。
步骤一:安装需要的库
使用Python进行采集需要用到requests
和beautifulsoup4
这两个库,我们可以使用pip快速安装:
pip install requests beautifulsoup4
步骤二:确定采集链接
首先要确定采集的链接是什么,这里以脚本之家Python电子书为例,链接是:http://www.jb51.net/books/python.htm
步骤三:发送请求并解析页面
使用requests
库向链接发送请求,然后使用beautifulsoup4
解析页面获取需要的信息。
import requests
from bs4 import BeautifulSoup
url = 'http://www.jb51.net/books/python.htm'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
# TODO: 解析页面获取需要的信息
else:
print('请求失败:', response.status_code)
步骤四:解析页面获取需要的信息
在这一步中,我们需要通过审查网页获取需要的信息所在的标签,然后使用beautifulsoup4提供的方法获取这些标签。
首先我们可以尝试获取所有的书籍列表:
books = soup.find_all('ul', class_='list_list1')[0].find_all('li')
这里我们使用find_all
方法来获取所有符合条件的标签。
接着我们可以遍历所有的书籍列表,并获取每本书的详细信息:
for book in books:
book_detail = book.find_all('a')
book_title = book_detail[0].text.strip()
book_url = book_detail[1].attrs['href']
# TODO: 将书籍保存到本地
在这里,我们首先获取书籍名和下载链接,然后在下一步将其保存到本地。
步骤五:将书籍保存到本地
使用requests
库发送带有文件信息的请求,将书籍保存到本地。
response = requests.get(book_url, headers=headers)
if response.status_code == 200:
with open(book_title+'.pdf', 'wb') as f:
f.write(response.content)
else:
print('下载失败:', response.status_code)
这里我们使用with
语句来打开文件并写入内容,这样可以自动管理文件的打开和关闭。
示例1:下载脚本之家Python电子书
import requests
from bs4 import BeautifulSoup
url = 'http://www.jb51.net/books/python.htm'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
books = soup.find_all('ul', class_='list_list1')[0].find_all('li')
for book in books:
book_detail = book.find_all('a')
book_title = book_detail[0].text.strip()
book_url = book_detail[1].attrs['href']
response = requests.get(book_url, headers=headers)
if response.status_code == 200:
with open(book_title+'.pdf', 'wb') as f:
f.write(response.content)
else:
print('下载失败:', response.status_code)
else:
print('请求失败:', response.status_code)
示例2:下载脚本之家kali工具使用电子书
import requests
from bs4 import BeautifulSoup
url = 'http://www.jb51.net/books/446298.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
books = soup.find_all('ul', class_='page')[0].find_all('li')
for book in books:
if 'file' in book.a.attrs['href']:
book_title = book.a.text.strip()
book_url = book.a.attrs['href']
response = requests.get(book_url, headers=headers)
if response.status_code == 200:
with open(book_title+'.pdf', 'wb') as f:
f.write(response.content)
else:
print('下载失败:', response.status_code)
else:
print('请求失败:', response.status_code)
在两条示例中,分别下载了脚本之家Python电子书和脚本之家kali工具使用电子书,代码相似度很高,只是处理目标url和页面采集规则的操作有所不同。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用python采集脚本之家电子书资源并自动下载到本地的实例脚本 - Python技术站