Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅在过去的一年里才有网络评论_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 仅在过去的一年里才有网络评论

Python 仅在过去的一年里才有网络评论,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正试图从tripadvisor中为某一特定的航空公司Spicejet搜集只有一年历史的评论。 链接: 但在存储审核日期时存在不一致性,因为有些日期在span class value: 2018年10月22日审查 其中一些在标题中: 5周前回顾 我想提取日期并设置一个条件,提取只有一年历史的评论。我在处理两种日期格式时遇到困难,所以我应该如何比较它 代码: date=items.find(class=“ratingDate”).get(“title”) 日期=dt.strtime(日期,“

我正试图从tripadvisor中为某一特定的航空公司Spicejet搜集只有一年历史的评论。 链接:

但在存储审核日期时存在不一致性,因为有些日期在span class value:

2018年10月22日审查

其中一些在标题中:


5周前回顾

我想提取日期并设置一个条件,提取只有一年历史的评论。我在处理两种日期格式时遇到困难,所以我应该如何比较它

代码:

date=items.find(class=“ratingDate”).get(“title”)
日期=dt.strtime(日期,“%B%d,%Y”)
如果(日期>dt.STRTIME('2017年11月26日'),%B%d%Y”):
日期=项目。查找('span',class='ratingDate')['title']

输出:

“它是可管理的”

(“2018年10月23日”) 获取信息()中的
)
6对于汤中的项目。查找所有(class=“innerbuble”):
7日期=项目。查找(class=“ratingDate”)。获取(“标题”)
---->8日期=dt.strtime(日期,“%B%d,%Y”)
9如果(日期>dt.STRTIME(‘2017年11月26日’,%B%d%Y)):
10打印(“================================================================”)
TypeError:strTime()参数1必须是str,而不是None

据我所知,您不必比较两个日期值,因为它们都表示相同的日期。因此,对于每次审查,检查是否存在跨类日期或标题日期。如果两者都存在,只需选中一个即可。检查可通过以下方式完成

对于标题日期,您将需要

span\u日期=无
title\u date=无
一年前的日期=datetime.now().替换(year=dt.year-3)
#在此处添加代码以获取span_date和title_date的日期字符串
#假设span_date=“2018年10月22日”
审核日期=无
如果span_日期不是无:
查看日期=datetime.datetime.strtime(span\u日期,“%B%d,%Y”).date()
#假设title_date=“5周前”
elif title_date不是无:
title\u date=[title\u date.split()[:2]]
时间=标题日期中金额的dict((fmt,float(amount))
dt=日期时间。时间增量(**时间)
review_date=datetime.datetime.today()-dt
#检查审核日期是否早于一年前
如果查看日期()小于一年前的日期:
打印(“保存此评论”)

你可以做很多工作,也可以追踪数据的来源,对数据源进行模糊处理,直到它吐出更可爱的东西。在这里,数据似乎是从以下位置加载的:
https://www.tripadvisor.com/AirlineTips

正如你所注意到的,这是非常丑陋的

它给我的确切电话是:
https://www.tripadvisor.com/AirlineTips?d=8728949&inline=true

它吐出:


“;物有所值”;
桑托斯水电站,2天前
|   

您可以利用CSS在类上的匹配方式,使用类选择器
.ratingDate
将所有审核日期向后拉。它将在
.ratingDate
.ratingDate.relativeDate
上匹配。您将发现匹配元素类的len为2,其中日期位于元素的title属性中,即class
ratingDate relativeDate
的元素

<span class="ratingDate relativeDate" title="October 26, 2018">Reviewed 4 weeks ago
</span>

恭喜-您遇到了CS的一个快乐:数据不一致。如果你有一个特定的问题,展示你的代码和数据——否则你需要在这里提问之前进行更多的研究——因为你的问题太广泛了。f.e.的一个答案可能是:将它们转换成相同的日期格式,并进行比较。您好!您是否可以表明您至少尝试过在问题中键入或输入代码?我们是来帮忙的,但我们必须在两者之间的某个地方见面!您正在寻找一个日期分析器。我听说了纳蒂的好消息。你有没有试过给出的答案?+关于性感的藤壶。。。对于=false,还有另一个加号。
span_date = None
title_date = None
one_year_ago_date = datetime.now().replace(year=dt.year-3)

# ADD CODE HERE to get date strings for span_date and title_date

# Assume span_date = "October 22, 2018"
review_date = None
if span_date is not None:
    review_date = datetime.datetime.strptime(span_date, "%B %d, %Y").date()

# Assume title_date = "5 weeks ago"
elif title_date is not None:
    title_date = [title_date .split()[:2]]
    time_dict = dict((fmt, float(amount)) for amount,fmt in title_date)
    dt = datetime.timedelta(**time_dict)
    review_date = datetime.datetime.today() - dt

# Check if review_date is earlier than one year ago
if review_date.date() < one_year_ago_date:
    print("Save this review")
<span class="ratingDate relativeDate" title="October 26, 2018">Reviewed 4 weeks ago
</span>
import requests
from bs4 import BeautifulSoup
url = 'https://www.tripadvisor.com/Airline_Review-d8728949-Reviews-or60-SpiceJet#REVIEWS'
data = requests.get(url).content
soup = BeautifulSoup(data,'lxml')
dateStrings = soup.select('.ratingDate')  
reviewStrings = soup.select('.partial_entry')
reviewDates = [date['title'].strip() if len(date['class']) == 2 else date.text.strip().replace('Reviewed ','') for date in dateStrings]
reviews = [review.text.strip() for review in reviewStrings]
allInfo = list(zip(updatedDates,reviews))