【发布时间】:2019-11-08 12:15:27
【问题描述】:
我是 python 和网络抓取的新手。 我使用 requests 和 beautifulsoup 编写了一些代码。一种代码用于抓取价格、名称和链接。效果很好,如下所示:
from bs4 import BeautifulSoup
import requests
urls = "https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-1"
source = requests.get(urls).text
soup = BeautifulSoup(source, 'lxml')
for figcaption in soup.find_all('figcaption'):
price = figcaption.div.text
name = figcaption.find('a', class_='title').text
link = figcaption.find('a', class_='title')['href']
print(price)
print(name)
print(link)
还有一个用于制作我需要从中刮取这些信息的其他网址,当我使用 print() 时,它也会提供正确的网址:
x = 0
counter = 1
for x in range(0, 70)
urls = "https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-" + str(counter)
counter += 1
x += 1
print(urls)
但是当我尝试将这两者结合起来以抓取一个页面然后将 url 更改为新的然后抓取它时,它只会在第一页上提供 70 次抓取的信息。请指导我完成这个。整个代码如下:
from bs4 import BeautifulSoup
import requests
x = 0
counter = 1
for x in range(0, 70):
urls = "https://www.meisamatr.com/fa/product/cat/2-%D8%A2%D8%B1%D8%A7%DB%8C%D8%B4%DB%8C.html#/pagesize-24/order-new/stock-1/page-" + str(counter)
source = requests.get(urls).text
soup = BeautifulSoup(source, 'lxml')
counter += 1
x += 1
print(urls)
for figcaption in soup.find_all('figcaption'):
price = figcaption.div.text
name = figcaption.find('a', class_='title').text
link = figcaption.find('a', class_='title')['href']
print(price)
print()
print(name)
print()
print(link)
【问题讨论】:
-
其次,你没有得到其他页面的原因是你的 for 循环中没有它。
-
我相信我的 for 循环中有它们。在网站上显示代码令人困惑。我会努力让它变得更好......
-
不需要增加
x,因为它是循环变量。另外,counter可以完全去掉,直接写ursl = "......" + str(x+1)
标签: python web-scraping beautifulsoup python-requests