gpt4 book ai didi

python - 如何解析字符串以查找特定的单词/数字并在找到时显示它们

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:42 25 4
gpt4 key购买 nike

我确定我写了一些相当有问题的代码,但它似乎可以完成工作。问题是它正在将数据打印到电子表格和列中,如果广告中的第一个词不是年份,我希望在该列中找到车辆的年份,然后它会显示可能是制造商的第一个词。

本质上我想设置 if 语句,这样如果车辆年份不在第一个单词中但在字符串中的其他地方,它仍然会找到它并将其打印到我的 .csv 中。

此外,我一直在努力解析多个页面,希望这里的人也能提供帮助。 url 中有 page=2 等,但我无法让它解析所有 url 并获取所有页面上的数据。目前,我尝试过的所有内容都只出现在第一页。您可能已经猜到,我对 Python 还很陌生。

import csv ; import requests

from bs4 import BeautifulSoup

outfile = open('carandclassic-new.csv','w', newline='', encoding='utf-8')
writer = csv.writer(outfile)
writer.writerow(["Link", "Title", "Year", "Make", "Model", "Variant", "Image"])

url = 'https://www.carandclassic.co.uk/cat/3/?page=2'

get_url = requests.get(url)

get_text = get_url.text

soup = BeautifulSoup(get_text, 'html.parser')


car_link = soup.find_all('div', 'titleAndText', 'image')


for div in car_link:
links = div.findAll('a')
for a in links:
link = ("https://www.carandclassic.co.uk" + a['href'])
title = (a.text.strip())
year = (title.split(' ', 1)[0])
make = (title.split(' ', 2)[1])
model = (title.split(' ', 3)[2])
date = "\d"
for line in title:
yom = title.split()
if yom[0] == "\d":
yom[0] = (title.split(' ', 1)[0])
else:
yom = title.date

writer.writerow([link, title, year, make, model])
print(link, title, year, make, model)



outfile.close()

有人可以帮我解决这个问题吗?我意识到底部的 if 语句可能有偏差。

代码成功地从字符串中获取了第一个单词,遗憾的是数据的结构方式并不总是车辆的制造年份 (yom)

最佳答案

Comment "1978 Full restored Datsun 280Z" becomes '1978' '1978' '280Z'.
Rather than '1978' 'Datsun' '280z'

改进 year验证,更改为使用 re模块:

import re

if not (len(year) == 4 and year.isdigit()):
match = re.findall('\d{4}', title)
if match:
for item in match:
if int(item) in range(1900,2010):
# Assume year
year = item
break

The output becomes:

'1978 Full restored Datsun 280Z', '1978', 'Full', '280Z'  

关于 false 结果 make='Full'你有两个选项。

  1. 停用词列表
    使用 ['full', 'restored', etc.] 等术语构建停用词列表和 loop title_items在停用词列表中找到第一个

  2. 制作人名单
    建立一个 Maker 列表,例如 ['Mercedes', 'Datsun', etc.]loop title_items找到第一个匹配项。


Question: find the vehicle's year if the first word in the advert isn't the year

二手 build-inmodule :


  • 使用的示例标题:

    # Simulating html Element
    class Element():
    def __init__(self, text): self.text = text

    for a in [Element('Mercedes Benz 280SL 1980 Cabriolet in beautiful condition'),
    Element('1964 Mercedes Benz 220SEb Saloon Manual RHD')]:
  • 获取 title来自 <a Element并按 blanks 拆分.

        title = a.text.strip()
    title_items = title.split()
  • 默认值为 title_items在索引 0, 1, 2 .

        # Default
    year = title_items[0]
    make = title_items[1]
    model = title_items[2]
  • 验证 year 是否满足条件4位

        # Verify 'year'
    if not (len(year) == 4 and year.isdigit()):
  • 循环所有itemtitle_items , 如果满足条件则中断。

            # Test all items
    for item in title_items:
    if len(item) == 4 and item.isdigit():
    # Assume year
    year = item
    break
  • 更改为假设,title_items在索引 0, 1makemodel

            make = title_items[0]
    model = title_items[1]
  • 检查是否model以数字开头

    Note: This will fail if a Model does not met this criteria!

        # Condition: Model have to start with digit
    if not model[0].isdigit():
    for item in title_items:
    if item[0].isdigit() and not item == year:
    model = item

    print('{}'.format([title, year, make, model]))

Output:

['Mercedes Benz 280SL 1980 Cabriolet in beautiful condition', '1980', 'Mercedes', '280SL']
['1964 Mercedes Benz 220SEb Saloon Manual RHD', '1964', 'Mercedes', '220SEb']

使用 Python 测试:3.4.2

关于python - 如何解析字符串以查找特定的单词/数字并在找到时显示它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com