Python爬虫系列(二)Quotes to Scrape(谚语网站的爬取实战)

本文通过使用selenium和BeautifulSoup实现了一个简单的爬虫应用,该应用能够从一个包含多页英文谚语的网站上抓取数据。具体步骤包括定位谚语元素和翻页按钮,通过selenium模拟点击翻页并解析每页的谚语。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来自己会写一些关于爬虫 实战的内容,把所学的知识加以运用。这篇文章是关于一个英文谚语网站的谚语爬取,并输出结果。

这个网站大致有10页谚语,所以是一个关于selenium使用的例子,大致思路使用webrdriver获取“下一页”按钮,获取每一页源码,输入所要的谚语

使用到的模块或工具(这些要提前准备好):

1、 BeautifulSoup

2、selenium 

3、time

4、driver=webdriver.Chrome("G:/chromedriver/chromedriver.exe")(我使用的Chrome驱       动, PhantomJS也可以)

(ps:初期学习爬虫的拾遗与总结这里有介绍)

目标网站:Quotes to Scrape

1531909-f562b6adabf66e92.png
目标网站

1、打开Chrom的开发者工具,找到谚语所在的位置

1531909-f02e28b61e45f234.png
谚语所在位置

2、找到下一页按钮Next

1531909-5709c611ba98cb7e.png
next按钮

3、把所要提取谚语的位置和下一页按钮位置确定之后,下面所写的代码:

加了详细备注,看起来应该不算困难

#xpath和自动化的结合使用

#from lxml import etree

from bs4 import BeautifulSoup

from selenium import webdriver

import time

#加载驱动

driver=webdriver.Chrome("G:/chromedriver/chromedriver.exe")

#driver = webdriver.PhantomJS()#这个我没试

#打开目标网址并获取源码

driver.get('http://quotes.toscrape.com/')

soup=BeautifulSoup(driver.page_source,'lxml')

i=0

while True:

try:

#找到并获取第一页的谚语位置span集合:items,点击下一页之后会变成下一页的谚语集合

items=soup.find_all('span',class_='text')

#打印获取到第一页的谚语

for item in items:

print('谚语'+str(i)+':')

print(item.text)

i+=1

#获取下一页next按钮

elem=driver.find_element_by_xpath('//ul[@class="pager"]/li[@class="next"]/a')

elem.click()

#停顿2秒,页面观察点击下一页的效果

time.sleep(2)

#获取下一页源码

soup=BeautifulSoup(driver.page_source,'lxml')

except:

break

4、下面是结果:

1531909-fe7237a48d853f1b.gif
结果图
<think>好的,用户想要一个Python爬虫的示例,特别是爬取名言网站的数据。我需要先理解他们的需求,可能他们刚开始学习爬虫,需要一个简单易懂的例子。 首先,我应该选择一个合适的库。用户可能对Beautiful Soup和Scrapy都有兴趣,但根据引用内容,用户提到了beautifulsoup4的示例[^1],以及Scrapy的相关教程[^3][^4]。不过用户可能更倾向于一个简单的示例,所以先用Beautiful Soup可能更合适,因为它更易于入门。 接下来,确定目标网站。需要找一个稳定的、允许爬取的名言网站。比如quotes.toscrape.com,这个网站专门用于爬虫练习,结构简单,适合教学。 然后,编写代码步骤。首先安装所需的库,比如requests和beautifulsoup4。然后发送HTTP请求获取页面内容,解析HTML提取数据,最后存储数据。用户可能需要详细的代码注释,方便理解每一步的作用。 还要考虑异常处理,比如网络请求失败的情况,使用try-except块来捕获异常,提高代码的健壮性。此外,存储数据到CSV文件,方便后续处理,这也是常见的需求。 同时,用户可能对扩展功能感兴趣,比如定时抓取或使用Scrapy框架。根据引用[2]和[^4],可以提到使用schedule库定时运行,或者用Scrapy构建更复杂的爬虫。这部分可以作为扩展内容,满足不同层次的需求。 需要确保代码符合Python最佳实践,比如使用with语句处理文件,合理组织代码结构。另外,检查是否需要遵守目标网站的robots.txt,确保合法合规。 最后,生成相关问题,帮助用户深入学习和解决可能遇到的困难。比如性能优化、反爬虫策略处理,以及数据存储的其他方式等。 总结,用户需要一个清晰、可运行的示例,以及相关的扩展知识,帮助他们从基础到进阶逐步学习Python爬虫技术。</think>以下是使用Python的BeautifulSoup和Requests库实现名言网站数据爬取的示例,基于引用内容中的技术点进行说明[^1]: ### 基础版示例(使用BeautifulSoup) ```python import requests from bs4 import BeautifulSoup import csv def scrape_quotes(): url = "http://quotes.toscrape.com" try: response = requests.get(url) response.encoding = 'utf-8' soup = BeautifulSoup(response.text, 'html.parser') quotes = [] for quote in soup.find_all('div', class_='quote'): text = quote.find('span', class_='text').text author = quote.find('small', class_='author').text tags = [tag.text for tag in quote.find_all('a', class_='tag')] quotes.append({ 'text': text, 'author': author, 'tags': ', '.join(tags) }) # 保存到CSV with open('quotes.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=['text', 'author', 'tags']) writer.writeheader() writer.writerows(quotes) print(f"成功爬取{len(quotes)}条数据") except Exception as e: print(f"爬取失败: {str(e)}") if __name__ == "__main__": scrape_quotes() ``` ### 功能说明 1. **数据采集**:通过`requests`库获取网页内容,使用`BeautifulSoup`解析HTML 2. **元素定位**:根据CSS类名定位名言文本(`.text`)、作者(`.author`)和标签(`.tag`) 3. **数据存储**:将结果保存为CSV文件,包含字段:名言内容、作者、标签 ### 扩展版建议(使用Scrapy框架) 根据引用[3],对于大规模爬取建议使用Scrapy框架: ```python import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" start_urls = ['http://quotes.toscrape.com'] def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').get(), 'author': quote.css('small.author::text').get(), 'tags': quote.css('div.tags a.tag::text').getall() } next_page = response.css('li.next a::attr(href)').get() if next_page: yield response.follow(next_page, self.parse) ``` ### 定时执行方案(基于引用[2][^2]) ```python import schedule import time from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings def run_spider(): process = CrawlerProcess(get_project_settings()) process.crawl(QuotesSpider) process.start() schedule.every().day.at("09:00").do(run_spider) while True: schedule.run_pending() time.sleep(60) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值