Python 如何用bs4制作抓取网站的爬虫
我写了一个脚本来删去引用和作者的名字。 在这个项目中,我使用请求获取页面的代码,并使用bs4解析HTML。 我使用while循环遍历分页链接到下一页,但我希望代码在没有剩余页面时停止运行。 我的代码可以工作,但它不会停止运行 这是我的密码:Python 如何用bs4制作抓取网站的爬虫,python,python-3.x,web-scraping,beautifulsoup,request,Python,Python 3.x,Web Scraping,Beautifulsoup,Request,我写了一个脚本来删去引用和作者的名字。 在这个项目中,我使用请求获取页面的代码,并使用bs4解析HTML。 我使用while循环遍历分页链接到下一页,但我希望代码在没有剩余页面时停止运行。 我的代码可以工作,但它不会停止运行 这是我的密码: from bs4 import BeautifulSoup as bs import requests def scrape(): page = 1 url = 'http://quotes.toscrape.com' r = re
from bs4 import BeautifulSoup as bs
import requests
def scrape():
page = 1
url = 'http://quotes.toscrape.com'
r = requests.get(url)
soup = bs(r.text,'html.parser')
quotes = soup.find_all('span',attrs={"class":"text"})
authors = soup.find_all('small',attrs={"class":"author"})
p_link = soup.find('a',text="Next")
condition = True
while condition:
with open('quotes.txt','a') as f:
for i in range(len(authors)):
f.write(quotes[i].text+' '+authors[i].text+'\n')
if p_link not in soup:
condition = False
page += 1
url = 'http://quotes.toscrape.com/page/{}'.format(page)
r = requests.get(url)
soup = bs(r.text,'html.parser')
quotes = soup.find_all('span',attrs={"class":"text"})
authors = soup.find_all('small',attrs={"class":"author"})
condition = True
else:
condition = False
print('done')
scrape()
因为
p_link
从来都不是汤。我发现两个原因
soup.find('li',attrs={“class”:“next”})
对于这种情况,使用:
if soup.find('li',attrs={"class":"next"}) is None:
condition = False
最后,如果你想写最后一页的引文,我建议你把“写入文件”部分放在最后。或者完全避免它。如下所示:
from bs4 import BeautifulSoup as bs
import requests
def scrape():
page = 1
while True:
if page == 1:
url = 'http://quotes.toscrape.com'
else:
url = 'http://quotes.toscrape.com/page/{}'.format(page)
r = requests.get(url)
soup = bs(r.text,'html.parser')
quotes = soup.find_all('span',attrs={"class":"text"})
authors = soup.find_all('small',attrs={"class":"author"})
with open('quotes.txt','a') as f:
for i in range(len(authors)):
f.write(str(quotes[i].encode("utf-8"))+' '+str(authors[i].encode("utf-8"))+'\n')
if soup.find('li',attrs={"class":"next"}) is None:
break
page+=1
print('done')
scrape()
因为
p_link
从来都不是汤。我发现两个原因
soup.find('li',attrs={“class”:“next”})
对于这种情况,使用:
if soup.find('li',attrs={"class":"next"}) is None:
condition = False
最后,如果你想写最后一页的引文,我建议你把“写入文件”部分放在最后。或者完全避免它。如下所示:
from bs4 import BeautifulSoup as bs
import requests
def scrape():
page = 1
while True:
if page == 1:
url = 'http://quotes.toscrape.com'
else:
url = 'http://quotes.toscrape.com/page/{}'.format(page)
r = requests.get(url)
soup = bs(r.text,'html.parser')
quotes = soup.find_all('span',attrs={"class":"text"})
authors = soup.find_all('small',attrs={"class":"author"})
with open('quotes.txt','a') as f:
for i in range(len(authors)):
f.write(str(quotes[i].encode("utf-8"))+' '+str(authors[i].encode("utf-8"))+'\n')
if soup.find('li',attrs={"class":"next"}) is None:
break
page+=1
print('done')
scrape()