我正在使用python做一个简单的爬网项目。我正在尝试将数据写入csv文件,但没有将任何内容写入csv文件
我尝试使用美丽的汤,对此我是完全陌生的
def article(self):
url="https://www.amazon.in/s?i=electronics&bbn=1389401031&rh=n%3A976419031%2Cn%3A976420031%2Cn%3A1389401031%2Cp_89%3ASamsung%2Cp_36%3A1318504031&dc&fst=as%3Aoff&qid=1560269023&rnid=1318502031&ref=sr_nr_p_36_2"
a=[]
r=requests.get(url)
doc=BeautifulSoup(r.text,"html.parser")
for cards in doc.select(".sg-col-inner"):
title=cards.select_one(".a-size-medium a-color-base a-text-normal").text
price=cards.select_one(".a-size-base").text
crawled=crawledArticle(title,price)
a.append(crawled)
return a
import csv
fetcher = b()
with open('pro.csv', 'w', newline='') as csvfile:
articlewriter = csv.writer(csvfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for article in fetcher.article():
articlewriter.writerow([article.title,article.price])
csv文件为空
答案 0 :(得分:1)
亚马逊已采取措施防止刮擦,因此您的方法在大多数时间可能无法正常工作,因为亚马逊会检测到您正在刮擦,并可能会将您重定向到验证码页面,以在您刮擦产品之前验证您是否为人类。
解决此问题的一种方法是使用 硒 。 Selenium是浏览器的自动工具,可让您像由人而不是程序来访问页面一样。
要使用它,必须先安装硒:
pip install selenium
并且您还需要为所需的浏览器安装驱动程序(在此示例中,我使用的是chrome)。
对于chrome驱动程序,请转到http://chromedriver.chromium.org/downloads,然后根据您当前的chrome版本和操作系统下载正确的驱动程序。将其放在与python程序相同的文件夹(目录)中。
以下是用硒刮擦亚马逊网页的代码:
import csv
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
class crawledArticle():
def __init__(self,title,price):
self.title=title
#self.rating=rating
self.price=price
class b:
def article(self):
a = []
url="https://www.amazon.in/s?i=electronics&bbn=1389401031&rh=n%3A976419031%2Cn%3A976420031%2Cn%3A1389401031%2Cp_89%3ASamsung%2Cp_36%3A1318504031&dc&fst=as%3Aoff&qid=1560269023&rnid=1318502031&ref=sr_nr_p_36_2"
options = Options()
options.headless = True
browser = webdriver.Chrome(options=options)
browser.get(url)
count = 1
while True:
try:
title = browser.find_element_by_xpath('//*[@id="search"]/div[1]/div[2]/div/span[3]/div[1]/div[' + str(count) + ']/div/div/div/div[2]/div[2]/div/div[1]/div/div/div[1]/h2/a/span')
price = browser.find_element_by_xpath('//*[@id="search"]/div[1]/div[2]/div/span[3]/div[1]/div[' + str(count) + ']/div/div/div/div[2]/div[2]/div/div[2]/div[1]/div/div[1]/div/div/a/span[1]/span[2]/span[2]')
info = crawledArticle(title.text, price.text)
a.append(info)
count += 1
except: break
browser.close()
return a
fetcher = b()
with open('pro.csv', 'w', newline='') as csvfile:
articlewriter = csv.writer(csvfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for article in fetcher.article():
articlewriter.writerow([article.title,article.price])
通常,硒会打开浏览器窗口,但是options.headless = True
会阻止它。
这是做什么的:通过产品的xpath搜索产品的标题和价格,将信息放入crawledArticle
的实例中,并将其添加到列表a[]
中。文件pro.csv
打开,并将信息写入文件。
元素的xpath只是通过html元素的层次结构找到它的一种方法。在chrome中,您可以通过以下方法找到它:转到检查菜单,突出显示所需的元素,然后右键单击,转到“复制”>“复制Xpath”。更多信息here
这是pro.csv的内容:
Samsung Guru 1200 (GT-E1200, Black);1,100
Samsung Guru Music 2 (SM-B310E, Blue);1,625
Samsung Guru Music 2 (SM-B310E, Black);1,625
Samsung Guru Music 2 SM-B310E (White);1,625
Samsung EO-BG920BFEGIN Bluetooth Headset with mic (Gold);2,399
Samsung Guru 1200 (Gold);1,100
Samsung EVO Plus Grade 3 Class 10 128GB MicroSDXC Memory Card with SD Adapter (MB-MC128GA/IN);1,793
Samsung Guru 1200 (GT-E1200, Indigo Blue);1,100
Samsung Guru Music 2 (Gold);1,625
Samsung Guru FM Plus (SM-B110E/D, Dark Blue);1,375
Samsung Guru 1200 (GT-E1200, White);1,100
Samsung EO-BG920BBEGIN Bluetooth Wireless in-Ear Headphones with mic(Black-Sapphire);2,699
Samsung Guru FM Plus (SM-B110E/D, Black);1,375
Samsung Guru FM Plus (Gold);1,375
Samsung EO-BG950CBEGIN Bluetooth Wireless in-Ear Flexible Headphones with Microphone (Black);3,580
Samsung Guru FM Plus (SM-B110E/D, White);1,375
Samsung Metro 350 (Gold);3,070
Samsung Level U Bluetooth Stereo Headset Flexible Joint With Neckband ( Gold );2,479
有关硒的信息---
官方网站:https://www.seleniumhq.org
非官方文档(非常有用):https://selenium-python.readthedocs.io/