实例二>>爬取论坛标题


爬取论坛中的标题

这部分的重点:

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)