1

저는 토런트 사이트에서 영화 이름과 장르를 수집하기 위해 파이썬으로 스크립트를 작성했습니다. BeautifulSoup은 의사 선택기를 지원하지 않으므로이를 극복 할 기술을 발견했습니다. 내가 지금 직면하고있는 유일한 문제는 아래 스크립트에서 결과를 얻으려면 INVERTED COMMA 내의 텍스트가 정확해야한다는 것입니다. 뭔가 일치하는 부분을 :contains 속성과 비슷한 사용할 수있는 방법이 있기 때문에 심지어 내 쿼리의 텍스트를 부분 구문 단어를 포함하는 경우 여전히 구문 분석 할 것입니다 Genre 후. 여기정확한 선택기 대신 부분 텍스트를 사용하는 방법?

[스크립트에서 Gen 또는 nre: 또는 enr 대신 Genre:을 사용할 것으로 예상]는 스크립트입니다

import requests 
from bs4 import BeautifulSoup 

soup = BeautifulSoup(requests.get("https://www.yify-torrent.org/search/1080p/").text,"lxml") 
for title in soup.select("div.mv"): 
    names = title.select("h3 a")[0].text 
    genre = ' '.join([item.next_sibling for item in title.select(".mdif li b") if item.text=="Genre:"]) 
    print(names, genre) 

결과 : 당신은 단순히 여부를 확인하기 위해 in 연산자를 사용할 수

Swelter (2014) 1080p Action 
Larry Crowne (2011) 1080p Comedy 
Terminal Island (1973) 1080p Action 
Heart of Midnight (1988) 1080p Drama 
The Lift (1983) 1080p Fantasy 
+0

if "Genre:" in item.text뿐만 아니라 if "nre:" in item.text, if "Gen" in item.text 등 ... 사용할 수 있습니다; 그러나 Scrapy는 의사 요소 등을 지원합니다. https://doc.scrapy.org/en/latest/topics/selectors.html을 참조하십시오. –

+0

때로는 위에 사용 된 텍스트가 이와 같이 사용하기에 충분히 길기 때문에 정확한 텍스트를 사용하는 것 이외에 부분 일치를 원했습니다. 나는 scrapy와 lxml도 사용했다. 그러나 나는 그것이 BeautifulSoup에서도 어떻게 사용될 수 있는지 알고 싶었습니다. 감사. – SIM

답변

1

문자열에 하위 문자열 포함 :

genre = ' '.join([item.next_sibling for item in title.select(".mdif li b") if "Genre:" in item.text]) 

당신은 내가 당신의 질문을 이해하지

+0

어디 계셨습니까? 이거 야. 이것이 바로 그 것이다. Thanksssssssss 많이. – SIM