实例二>>爬取论坛标题
爬取论坛中的标题
这部分的重点:
1、明确你要爬取网页的网址,使用谷歌的检查功能,可以抓取页面的数据,但加载的内容有很多,图片,js文件都非常多,必须要在这里面找到你想爬取的页面的网址。
2、用到了正则表达式,正则表达式不准确也是输出不了想要的结果,建议输出r.text后在正则表达式的网站上确认自己的表达式没有问题,再进行使用。
3、beautifulsoup知识点太多,单开文章汇总使用方法
# 使用正则表达式实现抓取网页的标题 import requests import re url = "https://bbs.tianya.cn/m/list-funinfo-1.shtml" headers = { 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Mobile Safari/537.36' } r = requests.get(url,headers) html = r.text print(r.text) title_list = re.findall('(.*?)\n.*\n.+',html) print(title_list)
# 使用BeautifulSoup抓取标题 import requests from bs4 import BeautifulSoup url = "https://bbs.tianya.cn/m/list-funinfo-1.shtml" headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Mobile Safari/537.36' } r = requests.get(url, headers) soup = BeautifulSoup(r.text,"lxml") ul = soup.find_all("div",class_="p-title") # 使用class做参数会导致语法错误,从Beautiful Soup的4.1.1版本开始,可以通过class_参数搜索有指定CSS类名的tag for i in range(len(ul)): title = ul[i].get_text() print(title)
""" 使用lxml提取网页源代码有3种方法: 1、XPath选择器 在XML文档中查找信息的语言 2、CSS选择器 3、BeautifulSoup的find()方法 """ import requests from lxml import etree link = "https://bbs.tianya.cn/m/list-funinfo-1.shtml" headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Mobile Safari/537.36' } r = requests.get(link, headers) html = etree.HTML(r.text) title_list = html.xpath('//div[@class="p-title"]/text()') # 右键检查,定位标题,右键选择复制-复制xpath,快速得到xpath路径,缺点是一次输出一个值 title_list1 = html.xpath('//*[@id="bbs_list"]/div[4]/ul/li[1]/a/div[1]/text()') print(title_list) print(title_list1)