三个python爬虫项目实例代码完整攻略
项目简介
本项目是针对python爬虫初学者提供的三个实例爬虫代码,分别是:
- 爬取豆瓣图书TOP250的书籍信息
- 爬取天猫商城的商品信息及评论
- 爬取GitHub上的开源项目信息
每个项目的代码都包括了完整的数据爬取和存储代码,可以作为初学者进行学习和实践的完整资料。
项目目标
在三个不同的爬虫项目中,我们将能够学习到:
- 如何通过HTTP请求获取网页的HTML代码
- 如何通过正则表达式筛选获取所需数据
- 如何通过XPath、CSS Selector获取网页元素信息
- 如何通过Python代码完成数据的存储、处理和可视化
项目实现
项目一:爬取豆瓣图书TOP250的书籍信息
- 爬取目标:豆瓣图书TOP250榜单,包括书名、作者、出版社、出版日期、评分等信息
-
实现过程:
- 利用requests库发送HTTP请求,获取HTML代码
- 利用正则表达式筛选所需数据
- 将数据存储至CSV文件中
-
示例代码:
import requests
import re
import csv
def get_html(url):
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:
return response.text
else:
return None
def parse_html(html):
pattern = re.compile(
r'<div class="pl2">.*?<a href="(.*?)" title="(.*?)">', re.S)
items = re.findall(pattern, html)
return items
def save_csv(items):
with open('books.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
for item in items:
writer.writerow([item[1], item[0]])
if __name__ == '__main__':
for i in range(0, 250, 25):
url = 'https://book.douban.com/top250?start=' + str(i)
html = get_html(url)
items = parse_html(html)
save_csv(items)
项目二:爬取天猫商城的商品信息及评论
- 爬取目标:天猫商城的商品信息及评论,包括商品名称、价格、销量、评论数量等信息
-
实现过程:
- 利用Selenium库模拟浏览器行为,获取HTML代码
- 利用Xpath方式或CSS Selector方式获取所需数据
- 将数据存储至MongoDB中
-
示例代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from pymongo import MongoClient
def get_html(url):
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
driver.get(url)
assert '天猫tmall.com' in driver.title
# 等待页面加载完毕
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'J_ItemList')))
html = driver.page_source
driver.quit()
return html
def parse_html(html):
items = []
product_list = html.xpath('//div[@id="J_ItemList"]/div[@class="product "]/div[@class="product-iWrap"]')
for product in product_list:
item = {}
item['name'] = product.xpath('.//p[@class="productTitle"]/a/@title')[0]
item['price'] = product.xpath('.//p[@class="productPrice"]/em/@title')[0]
item['sales'] = product.xpath('.//div[@class="productStatus"]/span[@class="productStatus-sellCount"]/em/text()')[0]
item['comments'] = product.xpath('.//div[@class="productStatus"]/span[@class="productStatus-comment"]/a/text()')[0]
items.append(item)
return items
def save_mongodb(items):
client = MongoClient('localhost', 27017)
db = client['tmall']
collection = db['goods']
result = collection.insert_many(items)
print(f'Inserted {len(result.inserted_ids)} items')
if __name__ == '__main__':
url = 'https://list.tmall.com/search_product.htm?q=%CD%AF%D2%A9%C6%B7&sort=d&style=w&from=mallfp..pc_1_searchbutton'
html = get_html(url)
items = parse_html(html)
save_mongodb(items)
项目三:爬取GitHub上的开源项目信息
- 爬取目标:GitHub上的开源项目信息,包括项目名称、作者、描述、星级等信息
-
实现过程:
- 利用GitHub的API获取开源项目信息
- 解析JSON数据,获取所需信息
- 将数据存储至MySQL数据库中
-
示例代码:
import requests
import json
import mysql.connector
def get_data(url):
response = requests.get(url)
if response.status_code == 200:
return json.loads(response.text)
else:
return None
def parse_data(data):
items = []
for repo in data:
item = {}
item['name'] = repo['name']
item['author'] = repo['owner']['login']
item['description'] = repo['description']
item['stars'] = repo['stargazers_count']
items.append(item)
return items
def save_mysql(items):
conn = mysql.connector.connect(user='root', password='root', database='github')
cursor = conn.cursor()
for item in items:
cursor.execute(
'INSERT INTO repos (name, author, description, stars) VALUES (%s, %s, %s, %s)', (item['name'], item['author'], item['description'], item['stars']))
conn.commit()
cursor.close()
conn.close()
if __name__ == '__main__':
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
data = get_data(url)
items = parse_data(data['items'])
save_mysql(items)
总结
本项目介绍了三个实例Python爬虫项目的完整实现过程,旨在帮助爬虫初学者巩固所学知识,掌握实际操作技能。同时,项目中也体现了Python爬虫领域的基本技能和注意事项,如HTTP请求、数据筛选、数据存储等内容。如果您在项目实施过程中依然存在疑问,欢迎随时向我提问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:三个python爬虫项目实例代码 - Python技术站