python爬虫(2)---虎扑电竞文章信息爬取


今天我们来爬取虎扑电竞英雄联盟区帖子的部分信息,提取文章的标题,作者,发布时间和文章链接信息,并将它们保存在csv文件中。

1. 网页分析

虎扑电竞英雄联盟区主页网址为:https://bbs.hupu.com/lol
并发现其之后页面网址为:

https://bbs.hupu.com/lol-2
https://bbs.hupu.com/lol-3
https://bbs.hupu.com/lol-4

即主页地址 + “-” + 页数
但由于未登录原因,虎扑限定只能查看前十页的内容。但只要了解了方法,爬取十页和一百页也没什么不同。
我们进入https://bbs.hupu.com/lol使用开发者工具查看网页源码。我们的目标是提取文章标题,作者,发布时间和文章链接。开发者工具中我们选择Elements,然后鼠标左击左上角按钮,如图:在这里插入图片描述
通过点击这个按钮后,鼠标在页面移动时,Elements中就可以迅速定位鼠标所在位置对应的页面代码。我们将鼠标分别移动到文章标题,作者和发布时间时,Elements中显示代码分别为:
在这里插入图片描述
在文章标题中还附带了文章的链接,点击进去后发现其完整链接为:

https://bbs.hupu.com/26070774.html

所以文章链接为https://bbs.hupu.com + href
在这里插入图片描述
在这里插入图片描述
确定想要的信息位置后,我们就可以进行爬取了。

2. 代码

1. 初始准备

import requests
from lxml import etree # 使用xpath提取信息
import csv # 将提取信息保存在csv文件中需导入csv库

2.排坑,文章标题提取

寻找到位置信息后,我们开始开心的爬取,先写提取标题的代码测试一下:

headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36',
    }
url = 'https://bbs.hupu.com/lol-1' # 与首页地址https://bbs.hupu.com/lol等同
res = requests.get(url, headers=headers)
root = etree.HTML(res.text)
name = root.xpath('//ul[@class="for-list"]/li//a[@class="truetit"]/text()')

for i in name:
    print(i)

结果为在这里插入图片描述
好像完美的成功了(顺序同网页显示的不同),但当我们再提取完作者等信息后,就会发现,标题竟然与作者信息等不匹配,标题数量少于其他信息的数量。这应该是有某些标题我们并没有爬取到,再次分析源码发现,虎扑对有些标题进行了特殊标记,它们存在与<b> </b>标签中,如图:在这里插入图片描述
所以我们的xpath不能通过直接匹配text()来提取信息了,迂回一下:

name = root.xpath('//ul[@class="for-list"]/li//a[@class="truetit"]')
for i in range(len(name)):
	if name[i].text:
		print(name[i].text)
	else
		print(name[i][0].text)

由于xpath返回的是一个列表,如果标题不在<b> </b>标签中name[i].text有内容即标题,否则标题存在于name[i][0].text中,这样爬取的才是全部的标题。而其他信息正常爬取即可。

3. 完整代码

def hupu_spilder(url):
    info = [] # 存放所有信息的列表
    # 对爬虫进行简单的伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36',
    }
    res = requests.get(url, headers=headers)
    root = etree.HTML(res.text)
    # 通过xpath提取所有需要的信息
    name = root.xpath('//ul[@class="for-list"]/li//a[@class="truetit"]')
    href = root.xpath('//ul[@class="for-list"]/li//a[@class="truetit"]/@href')
    author = root.xpath('//ul[@class="for-list"]/li//a[@class="aulink"]/text()')
    time = root.xpath('//ul[@class="for-list"]/li//a[@style="color:#808080;cursor: initial; "]/text()')
    # 判断标题存在于哪里,并将信息列表加入到info中
    for i in range(len(name)):
       if name[i].text:
           info.append([name[i].text, author[i], time[i], 'https://bbs.hupu.com' + href[i]])
       else:
           info.append([name[i][0].text, author[i], time[i], 'https://bbs.hupu.com' + href[i]])
    return info


if __name__ == '__main__':
    fieldnames = ['name', 'author', 'time', 'href'] # 信息名称
    f = open('hupu.csv', 'a+', encoding='utf-8') # 通过追加模式打开文件
    f_csv = csv.writer(f)
    f_csv.writerow(fieldnames) # 将各个信息的名称写入
    for i in range(1, 11): # 爬取前十页
        url = 'https://bbs.hupu.com/lol-{}'.format(i) # 拼接url
        info = hupu_spilder(url)
        f_csv.writerows(info) # 将一页的所有信息写入
    f.close()
    print("爬取完成!")

由此就将爬取的信息写入到csv文件中了在这里插入图片描述


本博客文章仅供博主学习交流,博主才疏学浅,语言表达能力有限,对知识的理解、编写代码能力都有很多不足,希望各路大神多多包涵,多加指点。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下如何使用 Python 爬虫爬取房产数据并保存到本地。 首先,您需要选择一个合适的网站来进行爬取。例如,可以选择链家网、安居客等房产网站。然后,您需要分析该网站的页面结构和数据请求方式,确定需要爬取哪些数据,以及如何获取这些数据。 接着,您可以使用 Python 的 requests 库来发送 HTTP 请求,获取网页内容。然后,可以使用 BeautifulSoup 库来解析网页内容,提取需要的数据。 最后,您可以使用 Python 的 Pandas 库将数据保存到本地的 Excel 或 CSV 文件中。以下是一个示例代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 发送 HTTP 请求获取网页内容 url = 'https://bj.lianjia.com/ershoufang/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') # 解析网页内容,提取需要的数据 house_list = soup.find_all('div', {'class': 'info'}) data = [] for house in house_list: name = house.find('div', {'class': 'title'}).text.strip() price = house.find('div', {'class': 'price'}).text.strip() area = house.find('div', {'class': 'houseInfo'}).text.strip() data.append([name, price, area]) # 将数据保存到本地文件 df = pd.DataFrame(data, columns=['名称', '价格', '面积']) df.to_excel('house_data.xlsx', index=False) ``` 这是一个简单的示例代码,您可以根据您需要爬取的数据和网站的不同来进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值