您现在的位置是:首页 > 技术教程 正文

分享Python7个爬虫小案例(附源码)

admin 阅读: 2024-03-19
后台-插件-广告管理-内容页头部广告(手机)

在这篇文章中,我们将分享7个Python爬虫的小案例,帮助大家更好地学习和了解Python爬虫的基础知识。以下是每个案例的简介和源代码:

1. 爬取豆瓣电影Top250

这个案例使用BeautifulSoup库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息,并将这些信息保存到CSV文件中。

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv
  4. # 请求URL
  5. url = ''
  6. # 请求头部
  7. headers = {
  8. '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'
  9. }
  10. # 解析页面函数
  11. def parse_html(html):
  12. soup = BeautifulSoup(html, 'lxml')
  13. movie_list = soup.find('ol', class_='grid_view').find_all('li')
  14. for movie in movie_list:
  15. title = movie.find('div', class_='hd').find('span', class_='title').get_text()
  16. rating_num = movie.find('div', class_='star').find('span', class_='rating_num').get_text()
  17. comment_num = movie.find('div', class_='star').find_all('span')[-1].get_text()
  18. writer.writerow([title, rating_num, comment_num])
  19. # 保存数据函数
  20. def save_data():
  21. f = open('douban_movie_top250.csv', 'a', newline='', encoding='utf-8-sig')
  22. global writer
  23. writer = csv.writer(f)
  24. writer.writerow(['电影名称', '评分', '评价人数'])
  25. for i in range(10):
  26. url = '' + str(i*25) + '&filter='
  27. response = requests.get(url, headers=headers)
  28. parse_html(response.text)
  29. f.close()
  30. if __name__ == '__main__':
  31. save_data()

2. 爬取猫眼电影Top100

这个案例使用正则表达式和requests库爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。

  1. import requests
  2. import re
  3. # 请求URL
  4. url = ''
  5. # 请求头部
  6. headers = {
  7. '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'
  8. }
  9. # 解析页面函数
  10. def parse_html(html):
  11. pattern = re.compile('

    (.*?)

    .*?

    (.*?)

    .*?

    (.*?)

    '
    , re.S)
  12. items = re.findall(pattern, html)
  13. for item in items:
  14. yield {
  15. '电影名称': item[1],
  16. '主演': item[2].strip(),
  17. '上映时间': item[3]
  18. }
  19. # 保存数据函数
  20. def save_data():
  21. f = open('maoyan_top100.txt', 'w', encoding='utf-8')
  22. for i in range(10):
  23. url = '' + str(i*10)
  24. response = requests.get(url, headers=headers)
  25. for item in parse_html(response.text):
  26. f.write(str(item) + '\\\\n')
  27. f.close()
  28. if __name__ == '__main__':
  29. save_data()

3. 爬取全国高校名单

这个案例使用正则表达式和requests库爬取全国高校名单,并将这些信息保存到TXT文件中。

  1. import requests
  2. import re
  3. # 请求URL
  4. url = ''
  5. # 请求头部
  6. headers = {
  7. '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'
  8. }
  9. # 解析页面函数
  10. def parse_html(html):
  11. pattern = re.compile('.*?(.*?).*?.*?(.*?).*?(.*?).*?(.*?).*?', re.S)
  12. items = re.findall(pattern, html)
  13. for item in items:
  14. yield {
  15. '排名': item[0],
  16. '学校名称': item[2],
  17. '省市': item[3],
  18. '总分': item[4]
  19. }
  20. # 保存数据函数
  21. def save_data():
  22. f = open('university_top100.txt', 'w', encoding='utf-8')
  23. response = requests.get(url, headers=headers)
  24. for item in parse_html(response.text):
  25. f.write(str(item) + '\\\\n')
  26. f.close()
  27. if __name__ == '__main__':
  28. save_data()

4. 爬取中国天气网城市天气

这个案例使用xpath和requests库爬取中国天气网的城市天气,并将这些信息保存到CSV文件中。

  1. import requests
  2. from lxml import etree
  3. import csv
  4. # 请求URL
  5. url = ''
  6. # 请求头部
  7. headers = {
  8. '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'
  9. }
  10. # 解析页面函数
  11. def parse_html(html):
  12. selector = etree.HTML(html)
  13. city = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/h1/text()')[0]
  14. temperature = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/i/text()')[0]
  15. weather = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/@title')[0]
  16. wind = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/span/text()')[0]
  17. return city, temperature, weather, wind
  18. # 保存数据函数
  19. def save_data():
  20. f = open('beijing_weather.csv', 'w', newline='', encoding='utf-8-sig')
  21. writer = csv.writer(f)
  22. writer.writerow(['城市', '温度', '天气', '风力'])
  23. for i in range(10):
  24. response = requests.get(url, headers=headers)
  25. city, temperature, weather, wind = parse_html(response.text)
  26. writer.writerow([city, temperature, weather, wind])
  27. f.close()
  28. if __name__ == '__main__':
  29. save_data()

5. 爬取当当网图书信息

这个案例使用xpath和requests库爬取当当网图书信息,并将这些信息保存到CSV文件中。

  1. import requests
  2. from lxml import etree
  3. import csv
  4. # 请求URL
  5. url = ''
  6. # 请求头部
  7. headers = {
  8. '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'
  9. }
  10. # 解析页面函数
  11. def parse_html(html):
  12. selector = etree.HTML(html)
  13. book_list = selector.xpath('//*[@id="search_nature_rg"]/ul/li')
  14. for book in book_list:
  15. title = book.xpath('a/@title')[0]
  16. link = book.xpath('a/@href')[0]
  17. price = book.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')[0]
  18. author = book.xpath('p[@class="search_book_author"]/span[1]/a/@title')[0]
  19. publish_date = book.xpath('p[@class="search_book_author"]/span[2]/text()')[0]
  20. publisher = book.xpath('p[@class="search_book_author"]/span[3]/a/@title')[0]
  21. yield {
  22. '书名': title,
  23. '链接': link,
  24. '价格': price,
  25. '作者': author,
  26. '出版日期': publish_date,
  27. '出版社': publisher
  28. }
  29. # 保存数据函数
  30. def save_data():
  31. f = open('dangdang_books.csv', 'w', newline='', encoding='utf-8-sig')
  32. writer = csv.writer(f)
  33. writer.writerow(['书名', '链接', '价格', '作者', '出版日期', '出版社'])
  34. response = requests.get(url, headers=headers)
  35. for item in parse_html(response.text):
  36. writer.writerow(item.values())
  37. f.close()
  38. if __name__ == '__main__':
  39. save_data()

6. 爬取糗事百科段子

这个案例使用xpath和requests库爬取糗事百科的段子,并将这些信息保存到TXT文件中。

  1. import requests
  2. from lxml import etree
  3. # 请求URL
  4. url = ''
  5. # 请求头部
  6. headers = {
  7. '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'
  8. }
  9. # 解析页面函数
  10. def parse_html(html):
  11. selector = etree.HTML(html)
  12. content_list = selector.xpath('//div[@class="content"]/span/text()')
  13. for content in content_list:
  14. yield content
  15. # 保存数据函数
  16. def save_data():
  17. f = open('qiushibaike_jokes.txt', 'w', encoding='utf-8')
  18. for i in range(3):
  19. url = '' + str(i+1) + '/'
  20. response = requests.get(url, headers=headers)
  21. for content in parse_html(response.text):
  22. f.write(content + '\\\\n')
  23. f.close()
  24. if __name__ == '__main__':
  25. save_data()

7. 爬取新浪微博

这个案例使用selenium和requests库爬取新浪微博,并将这些信息保存到TXT文件中。

  1. import time
  2. from selenium import webdriver
  3. import requests
  4. # 请求URL
  5. url = ''
  6. # 请求头部
  7. headers = {
  8. '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'
  9. }
  10. # 解析页面函数
  11. def parse_html(html):
  12. print(html)
  13. # 保存数据函数
  14. def save_data():
  15. f = open('weibo.txt', 'w', encoding='utf-8')
  16. browser = webdriver.Chrome()
  17. browser.get(url)
  18. time.sleep(10)
  19. browser.find_element_by_name('username').send_keys('username')
  20. browser.find_element_by_name('password').send_keys('password')
  21. browser.find_element_by_class_name('W_btn_a').click()
  22. time.sleep(10)
  23. response = requests.get(url, headers=headers, cookies=browser.get_cookies())
  24. parse_html(response.text)
  25. browser.close()
  26. f.close()
  27. if __name__ == '__main__':
  28. save_data()

希望这7个小案例能够帮助大家更好地掌握Python爬虫的基础知识!

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索