【Python】简单的爬虫抓取

打印 上一主题 下一主题

主题 812|帖子 812|积分 2436

结果:抓取某个学校网站的传授名录,并获取研究方向。
由于网站使用的都是明文,所以抓起来没什么难度,且寻常访问量小,很值得用来训练。

代码如下,解释请见解释
  1. import time
  2. import requests
  3. from bs4 import BeautifulSoup
  4. # 创建一个包含浏览器头部信息的字典,模拟浏览器,可以骗过一些简单的反爬虫网站
  5. headers = {
  6.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
  7.         # 可以根据需要添加更多的头部信息,比如:
  8.         # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  9.         # 'Accept-Language': 'en-US,en;q=0.5',
  10.         # 'Accept-Encoding': 'gzip, deflate, br',
  11.         # 'DNT': '1', # Do Not Track 请求头表明用户不希望被追踪
  12.         # 'Connection': 'keep-alive',
  13.         # 'Upgrade-Insecure-Requests': '1',
  14.         # 如果需要处理cookies,也可以在这里设置'Cookie'字段
  15.         # 'Cookie': 'your_cookie_here',
  16. }
  17. # 获取教师信息
  18. def request_teacher_info(url):
  19.         # 发送GET请求,并带上headers
  20.         response = requests.get(url, headers=headers)
  21.         content = response.content.decode('utf-8')
  22.         # 确保请求成功
  23.         if response.status_code == 200:
  24.                 soup = BeautifulSoup(content, 'html.parser')
  25.                 # 抓取div标签下,class为infobox的标签
  26.                 infobox_div = soup.find('div', class_='infobox')
  27.                 # 抓取span标签,class为'h_info',并且包含"姓名"字样
  28.                 name_span = infobox_div.find('span', class_='h_info', string='姓名:')
  29.                 # 抓取"姓名"字样后一个字样,即实际姓名
  30.                 name = name_span.find_next_sibling('span').get_text(strip=True)
  31.                 # 同样的方法抓研究方向,想继续抓,还有邮箱,发表论文这些,都是一样的套路
  32.                 research_direction_span = infobox_div.find('span', class_='h_info', string='研究方向:')
  33.                 research_direction = research_direction_span.find_next_sibling('span').get_text(strip=True)
  34.                 print(f"{name}  研究方向:{research_direction}")
  35.         else:
  36.                 print(f"请求失败,状态码为:{response.status_code}")
  37. # 获取教师列表
  38. def request_teacher_list(url):
  39.         # 发送GET请求,并带上headers
  40.         response = requests.get(url, headers=headers)
  41.         content = response.content.decode('utf-8')
  42.         link_list = []
  43.         # 确保请求成功
  44.         if response.status_code == 200:
  45.                 # 使用BeautifulSoup解析HTML内容
  46.                 soup = BeautifulSoup(content, 'html.parser')
  47.                 right_list_r = soup.find('div', class_='right-list r')
  48.                 # 教师列表
  49.                 teacher_lists = right_list_r.find_all('div', class_='teacher-list')
  50.                 for teacher_list in teacher_lists:
  51.                         job_type = teacher_list.find("h2", class_="title l")
  52.                         # 这些打印信息可以忽略,重要信息已在request_teacher_info()中展示
  53.                         print(job_type.get_text(strip=True))
  54.                         professor_ul = teacher_list.find_all('ul')[0]
  55.                         a_list = professor_ul.find_all('a', href=True)
  56.                         for a in a_list:
  57.                                 link = a['href']
  58.                                 link_list.append(link)
  59.                                 print(link)
  60.                         print("=" * 50)
  61.         return link_list
  62. link_list1 = request_teacher_list("https://example.com")
  63. for link in link_list1:
  64.         request_teacher_info(link)
  65.         # time.sleep(0.5)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表