做网站设计挣钱吗,网站网站代理可以做不,娱乐企业网站建设,工作室怎么注册一、爬虫原理
网络爬虫是一种用于自动获取网页内容的程序。它模拟用户浏览网页的过程#xff0c;通过发送HTTP请求获取网页的源代码#xff0c;并利用解析和提取技术来获取所需的数据。
1. HTTP请求与响应过程
爬虫向目标网站发送HTTP请求#xff0c;请求包含URL、请求方…一、爬虫原理
网络爬虫是一种用于自动获取网页内容的程序。它模拟用户浏览网页的过程通过发送HTTP请求获取网页的源代码并利用解析和提取技术来获取所需的数据。
1. HTTP请求与响应过程
爬虫向目标网站发送HTTP请求请求包含URL、请求方法如GET或POST、请求头Headers等。服务器接收到请求后会返回HTTP响应其中包含状态码、响应头和响应体网页内容。
2. 常用爬虫技术
请求库例如requests和aiohttp用于发送HTTP请求。解析库例如BeautifulSoup、lxml和PyQuery用于解析网页内容。存储库例如pandas和SQLite用于存储爬取的数据。异步库例如asyncio和aiohttp用于实现异步爬虫提高爬取效率。
二、Python爬虫常用库
1. 请求库
requests一个简洁而强大的HTTP库支持HTTP连接保持和连接池、SSL证书验证、Cookies等。aiohttp一个基于asyncio的异步HTTP库适合高并发的爬虫场景。
2. 解析库
BeautifulSoup一个用于解析HTML和XML的库简单易用支持多种解析器。lxml一个高效的XML和HTML解析库支持XPath和CSS选择器。PyQuery一个Python版的jQuery语法与jQuery类似易于上手。
3. 存储库
pandas一个强大的数据分析库提供数据结构和数据分析工具支持多种文件格式。SQLite一个轻量级的数据库支持SQL查询适用于小型爬虫项目。
接下来将通过7个Python爬虫的小案例帮助大家更好地学习和理解Python爬虫的基础知识。以下是每个案例的简介和源代码
案例1爬取豆瓣电影Top250
这个案例使用BeautifulSoup库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息并将这些信息保存到CSV文件中。
import requests
from bs4 import BeautifulSoup
import csv# 请求URL
url https://movie.douban.com/top250
# 请求头部
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.36
}# 解析页面函数
def parse_html(html):soup BeautifulSoup(html, lxml)movie_list soup.find(ol, class_grid_view).find_all(li)for movie in movie_list:title movie.find(div, class_hd).find(span, class_title).get_text()rating_num movie.find(div, class_star).find(span, class_rating_num).get_text()comment_num movie.find(div, class_star).find_all(span)[-1].get_text()writer.writerow([title, rating_num, comment_num])# 保存数据函数
def save_data():f open(douban_movie_top250.csv, a, newline, encodingutf-8-sig)global writerwriter csv.writer(f)writer.writerow([电影名称, 评分, 评价人数])for i in range(10):url https://movie.douban.com/top250?start str(i * 25) filterresponse requests.get(url, headersheaders)parse_html(response.text)f.close()if __name__ __main__:save_data()案例2爬取猫眼电影Top100
这个案例使用正则表达式和requests库爬取猫眼电影Top100的电影名称、主演和上映时间等信息并将这些信息保存到TXT文件中。
import requests
import re# 请求URL
url https://maoyan.com/board/4
# 请求头部
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.36
}# 解析页面函数
def parse_html(html):pattern re.compile(p classnamea href.*? title(.*?) data-actboarditem-click data-val{movieId:\\\\d}(.*?)/a/p.*?p classstar(.*?)/p.*?p classreleasetime(.*?)/p, re.S)items re.findall(pattern, html)for item in items:yield {电影名称: item[1],主演: item[2].strip(),上映时间: item[3]}# 保存数据函数
def save_data():f open(maoyan_top100.txt, w, encodingutf-8)for i in range(10):url https://maoyan.com/board/4?offset str(i * 10)response requests.get(url, headersheaders)for item in parse_html(response.text):f.write(str(item) \n)f.close()if __name__ __main__:save_data()案例3爬取全国高校名单
这个案例使用正则表达式和requests库爬取全国高校名单并将这些信息保存到TXT文件中。
import requests
import re# 请求URL
url http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.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.36
}# 解析页面函数
def parse_html(html):pattern re.compile(tr classalt.*?td(.*?)/td.*?tddiv alignleft.*?a href(.*?) target_blank(.*?)/a/div/td.*?td(.*?)/td.*?td(.*?)/td.*?/tr, re.S)items re.findall(pattern, html)for item in items:yield {排名: item[0],学校名称: item[2],省市: item[3],总分: item[4]}# 保存数据函数
def save_data():f open(university_top100.txt, w, encodingutf-8)response requests.get(url, headersheaders)for item in parse_html(response.text):f.write(str(item) \n)f.close()if __name__ __main__:save_data()