เวอร์ชัน `possibly()` ของ `read_lines()`
เรายังคงทำงานกับชุด URL ที่ได้รับมาสำหรับการ scrape ต่อไป โดยจะลองใช้หลายวิธีเพื่อระบุ URL ที่ไม่สามารถเข้าถึงได้ ทำไมต้องทำแบบนี้? เพราะขั้นตอนแรกของการ web scraping คือการตรวจสอบว่าเข้าถึง URL นั้นได้หรือไม่ นี่คือสิ่งที่โค้ดที่เราเขียนจะนำไปใช้ประโยชน์
ในแบบฝึกหัดก่อนหน้า เราได้ครอบฟังก์ชัน read_lines() ด้วย safely() ในแบบฝึกหัดนี้ จะใช้ฟังก์ชัน possibly() แทน
ในศัพท์ด้านเว็บ 404 หมายถึงหน้าเว็บที่ไม่สามารถเข้าถึงได้ ตัวเลขนี้จะถูกใช้เป็นอาร์กิวเมนต์ otherwise
นอกจากนี้ เนื่องจาก read_lines() คืนค่าเวกเตอร์ที่มีความยาว n เมื่ออ่านหน้าเว็บ เราจะรวมค่าเหล่านั้นเข้าด้วยกันโดยใช้ฟังก์ชัน paste()
เวกเตอร์ urls ได้เตรียมไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Functional Programming ระดับกลางด้วย purrr
คำแนะนำการฝึกหัด
ครอบฟังก์ชัน
read_lines()ด้วยpossibly()โดยกำหนดให้คืนค่า 404 เมื่อเกิดข้อผิดพลาดMap ฟังก์ชันที่สร้างขึ้นใหม่นี้กับรายการ URL แล้ว pipe ต่อไปยัง
set_names()โดยตรงแปลงแต่ละองค์ประกอบในลิสต์ให้เป็น character ที่มีความยาว 1 โดยใช้ฟังก์ชัน
paste()พร้อมกำหนดอาร์กิวเมนต์collapseเป็น" "กรองเฉพาะองค์ประกอบที่มีค่าเท่ากับ 404
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create a possibly() version of read_lines()
possible_read <- ___(___, otherwise = ___)
# Map this function on urls, pipe it into set_names()
res <- map(urls, ___) %>% ___(urls)
# Paste each element of the list
res_pasted <- ___(res, ___, collapse = ___)
# Keep only the elements which are equal to 404
___(res_pasted, ___)