这个项目是鄙人在第一次接触爬虫时,通过网络途径学习以及对于网站分析得到的有效但非高效的代码。 代码分两个部分,第一部分是获取网址中并未进行加密的(不知道用加密这个词形容合不合适)评论(即评论直接可以在网页源代码中查找到) 第二部分是获取进行加密过的评论(即评论存在于后续请求文件Fetch/XHR中)
其中由于在原始目标中网址https://cn.tripadvisor.com/Airline_Review-d8729000-Reviews-Air-China无法从网址源代码和后续请求中找到评论,所以我从跳转网址https://cn.tripadvisor.com/ShowUserReviews
具体代码文件我放在我的githubKinggggman/Kingggg-: 这是一个基于python语言的爬虫程序,爬取猫途鹰网站中航空公司的评论(新手爬虫过程分享) (github.com)中方便保存和查看。
以下是部分代码的展示
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
"Referer": 'https://cn.tripadvisor.com/'
#UA应该是必须的(绕过反爬机制的基本操作),Referer有些网站不需要也可以运行代码,这里可能也不需要。
}
下面是url对urls集合的循环读取,由于网址原因,不得不将需要爬取的网址手动放在一个集合中进行爬取
for url in urls:
user_name_list = []
comment_list = []
point_list = []
#提前设置好需要用到的保存信息的集合,主要是配合下面while循环的判断
print(url)
#打印出正在爬取的url
response = requests.get(url=url, headers=headers)
print(response.status_code)
#返回request的响应值是在写代码过程中 看爬取过程中出现的问题的可能性,有利于分析爬取过程。 这里是不是返回200或者403不影响爬取信息
while len(user_name_list) == 0:
#这个while循环是为了防止加载出了url,但网址的信息内容由于网速原因(我猜)或者其他什么因素导致没有加载完毕,无法正常读取到信息。
page_text = requests.get(url=url, headers=headers).text
#通过request的get请求 请求到网址的源代码信息,并以text格式保存在page_text的变量中
#也可以这样写
#sui-bian-yi-ge-bian-liang-ming = requests.get(url=url, headers=headers)
#page_text = sui-bian-yi-ge-bian-liang-ming.text
ex2 = '<div class="username mo">.*?>(.*?)<.*?</div>'
user_name_list = re.findall(ex2, page_text, re.S)
print(user_name_list)
ex1 = '<div class="entry"><p class="partial_entry">(.*?)</p></div>'
comment_list = re.findall(ex1, page_text, re.S) # re.S单行匹配,re.M多行匹配
print(comment_list)
ex3 = '<span class="ui_bubble_rating bubble_(.*?)0">.*?</span>'
point_list = re.findall(ex3, page_text)
print(point_list)
#以上三个部分就是通过正则化读取到对应匹配的位置,将需要爬取的信息匹配到并保存在变量中
time.sleep(10)
#在频繁进行爬虫操作的过程中会遇到反爬机制的检测(过于频繁的访问一个url)会导致报错。所以在这里设置一个休息间断。
Point = Point + point_list
User = User + user_name_list
Comment = Comment + comment_list
#在对一个url中的信息爬取完成后,保存在我们提前设置好的集合中
下面就是将爬取到的Point、User、Comment数据一条一条对应的写进excel文件中(没有对应的文件名的文件就会创建一个新的)
f = open("中国南方航空1.csv", "w", encoding="utf-8-sig", newline="")
csvwritter = csv.writer(f)
#没有相应命名的文件就会创建一个对应名字的.csv文件,将writer操作赋予 一个变量
for i in range(len(Comment)):
data = [User[i]] + [Point[i]] + [Comment[i]]
csvwritter.writerow(data)
#循环将我们之前收集到的信息 一条一条的写在我们前面创建的文件中
print('over')
以上就是我第一次接触爬虫爬取网站信息的一些代码过程,我通过实时的学习爬虫课程,完成对网址信息的分析、判断。进行“照虎画猫”的爬虫代码编写,其中有部分代码我只知道怎么使用,躯体原理并不完全理解,或者说理解的不是很透彻。谨此分享一下我的新手路程,有什么可以改进的或者原理没有解释到位的,希望大家可以指出。