【问题标题】:Searching Word in String after webscraping网页抓取后在字符串中搜索单词
【发布时间】:2021-11-02 14:47:16
【问题描述】:

所以我的问题是我并不真正喜欢编程,我唯一做的就是制作网站并出售它们。

我学了一点 Python,但学的不多,这就是我的问题所在。我开始编写一个程序,因为我想在有用的时候学习这门语言......所以正如我早些时候所说,我在那里销售网站是我国的一个网站,几乎每家公司都在上面列出。我想要一个 scraper 来查找网站上的所有号码。

目前它只适用于第一个数字,但每页只列出十个,这是我的代码:

从请求导入获取

定义开始():

keyword = input("Suchbegriff: ")
URL = "https://www.herold.at/gelbe-seiten/" + keyword + "/"
print("Targing... : " + URL)
data = get(URL)
print(data.text[:100000000000000000000000])
    
tel = data.text.find('"tel:')

print(tel)
print(data.text[tel:tel + 19])

开始()

目前,如果我输入像“friseur”这样的分支利基名称,我只会得到第一个数字作为输出:

"39820 "电话:+4315124367" 电话"

我怎样才能让爬虫继续并获取其他 9 个。

已经感谢您的回答!

【问题讨论】:

  • find 是字符串类的一个方法,它只返回您要查找的内容的第一次出现
  • 那么我该怎么办,它会捕获所有 10 个?
  • 可能像for line in data.text.split('\n'): if line.find('"tel:') > -1: ...这样的smt,否则您可以使用bs4之类的模块来废弃页面的内容或使用正则表达式
  • 好的,谢谢,我试试bs4
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python string search web-crawler


【解决方案1】:

要获取数字,您可以使用内置模块re(代表正则表达式的regex简写)。参数flags=re.M 代表多行,因此它将模式应用于整个字符串,而不仅仅是行尾。

import re
import requests

url = # see above
response = request.get(url)

tel_nrs = re.search(r'(\+\d+)', response.text, flags=re.M)

print(tel_nrs.groups())

输出

+4315124367
...

备注:同样如果您使用bs4,您将不得不面对这个问题,bs4 对导航页面很有用

可以和bs4一起

from bs4 import BeautifulSoup
import re
import requests

url = # see above
response = request.get(url)

# make the response a "navigable" object
soup = BeautifulSoup(response.text, 'lxml')

# regex pattern for the tel nr
n_teL_pattern = re.compile(r'(\+\d+)')

# look for all string in the soup which satisfy the pattern
for s in soup.find_all(string=n_teL_pattern):
    print(n_teL_pattern.search(s).group())   # print the match

【讨论】:

猜你喜欢
  • 2015-10-27
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
相关资源
最近更新 更多